关于DLL如何使用比较简单,而且课本上以及网上相关内容也比较多,就不介绍了,只是说明我在使用过程中遇到的一个小错误,这是我第一次写帖子,可能写得不太好,请大家多多包涵。
dll成功写完调用以后,运行程序,会提示错误,错误内容如下:
The value of ESP wasnot properly saved across a function call. This is usually a result of callinga function declared with one calling convention with a function pointer declaredwith a different calling convention.
(Press Retry to Debug the Application)
原因:
在delphi中写的DLL函数定义的调用规则是__stdcall(也只有使用这样的调用规则,该DLL中的函数才能被其他平台使用) , 此时在vc中进行定义并且调用该函数, 但是所有编译器默认的调用规则是__cdecl,而__stdcall 类型的函数却用了 __cdecl 的调用规则,由于编译时不会报错,结果出现了运行时异常。所以把在函数定义中进行设置调用规则即可解决此问题。
解决办法:在定义函数类型时进行函数调用规则的更改
如出错前的函数类型定义是: typedef void ( Foo)(int a); 更改为: typedef void (__stdcall Foo)(int a);
也可以把__stdcall改为WINAPI
---这样就可以解决上述的错误了