我的dll 里有一个可被外部调用得函数dllFunc(TimeStruct* info);
TimeStruct是我在dll里定义的一个结构。我在程序里调用dllFunc()时出错(是在运行时),错误如下:
Debug Error!
Program:E:\testtimer\Debug\testtimer.exe
Module:
File:i386\chkesp.c
Line:42the value of ESP was not properly saved across a function call.This is usually a result of calling a function declared with one calling covention with a function pointer declared with a defferent calling convention.(Press Retry to debug the application)我在调用时也传了TimeStruct类型的指针过去,可就会出这样的错误
很奇怪,我在调用没有参数的dll里的函数没有错,
TimeStruct是我在dll里定义的一个结构。我在程序里调用dllFunc()时出错(是在运行时),错误如下:
Debug Error!
Program:E:\testtimer\Debug\testtimer.exe
Module:
File:i386\chkesp.c
Line:42the value of ESP was not properly saved across a function call.This is usually a result of calling a function declared with one calling covention with a function pointer declared with a defferent calling convention.(Press Retry to debug the application)我在调用时也传了TimeStruct类型的指针过去,可就会出这样的错误
很奇怪,我在调用没有参数的dll里的函数没有错,
解决方案 »
- edit里设置光标到文本结尾
- 在group box里放一个list box控件,为什么老被group box当住呢?
- 请那位大侠指点迷津
- 需要在运行时创建表,但表名不能确定,有没有办法?哪位高手能赐教?
- 想找一些学习用的源代码,那位仁兄帮个忙
- 关于win2000下symbol的问题,高分求助
- 简单问题,编译sdk、ddk程序
- 大家有没有 STL 的详细资料啊
- 大家好 进来看看 关于G726压缩问题 我都快疯了 大家帮帮我
- 请问VC输入大量的数据用什么控件?
- 用ODBC如何连接ORACLE数据库
- 我用vc写了一个dll,里面用到了CSocket类,在pb下调用不成功,把CSocket类去了就可以,为什么?
说的
DLL导出函数的参数最好不是指针,也别是引用
不过,
你试一下
把参数类型改成远指针( 如果不想改太多的话 )
选中C/C++
CATEGORY选择
CODE GENERATION
CALLING CONVENTION中的选项
应用程序和动态库的该选项设成一样的
重编译
试一试
一样,可还是不行是不是我不能在程序声明 这个struct,而是应该从dll里引出这种结构?
具体的设定检查同mmm1122(蒙) 的相同。解释:
在dll工程和exe工程中,有一个设定函数调用类型的操作,其设定是为了确定调用函数返回时参数的压栈出栈的处理。具体的来说就是_stdcall和_cdecl及_fastcall的区别。 通常在dll动态库导出函数声明时需要定义,在别处使用时用到这个定义。
例如:
dll:声明:
int _stdcall func();exe:声明:
int _stdcall func();
函数原型重新改写一下远指针
是win3.1下编程时用过的
现在是32位了
刚刚试了一下,已经没有远指针了
难道让函数返回这个结构的变量吗?
extern "C" __declspec(dllexport) int func(...)
{
...
}调用声明:
extern "C" __declspec(dllimport) int func(...);应该不会出问题
后来就发现原来是调用类型申明的不对