- 论坛徽章:
- 0
|
delphi 调用VC写的DLL库怎么老是报内存错?
两种办法,一种是写DLL函数时,函数必须是有extern "C" __declspec(dllexport) .... __stdcall 定义.
也就是使用C语言的命名方式,__stdcall调用约定,如果你正确照做,应当不回有什么问题的.
也就是说,你的头文件的函数声明应当是
extern "C" __declspec(dllexport) int __stdcall sum(int x, int y)这样的;
如果你没有加__stdcall 的化,C/C++语言默认使用的是__cdecl约定;
不加extern "C"的话,C++使用的是自己的名字分裂技术,pascal不一定能接受.
__declspec(dllexport)则是指定这个函数是有DLL导出的.
另一种方法,使用COM方式,定义一个接口ISum,ISum继承自IUnknown,
定义一个实现类CSum实现了IUnknow的QueryInterface AddRef ReleaseRef 以及ISum接口的Sum方法,还需要实现继承自IClassFactory接口的CClassFactory类,然后实现几个DLL支持函数如DllRegisterServer和DllUnregisterServer函数.或者如果懒得写这几个函数的话,直接使用ATL创建一个COM对象,编译连接后运行regsvr32注册组件.
然后有Delphi导入COM组建产生一个TLB的接口文件,并在你的Delphi程序中使用它.
如果你遵循以上两种方法的话,应当不回在出什么问题了. |
|