VC++中的导出DLL如下声明,未使用.def文件定义导出:
extern "C" __declspec(dllimport) int __stdcall fnVCDLL(void);
VC++生成的DLl中实际导出名称为:
C++ Builder 中使用如下声明导入:
extern "C" __declspec(dllimport) int __stdcall fnVCDLL(void);
使用implib将VC++生成的dll对应lib生成C++ Builder格式并加入到工程中
在C++ Builder中直接调用成功:
int i=fnVCDLL();
如果VC++的DLL使用.def文件定义导出,生成的实际导出名为:
fnVCDLL
居然调用也能成功。
现在去掉VC++中的extern "C" 和导出声明,用.def定义导出:
int __stdcall fnVCDLL(void);
.def定义如下:
LIBRARY VCDLL
EXPORTS
fnVCDLL;
重新生成lib和dll,在C++ Builder中的声明不变,直接调用成功,如果C++ Builder中去掉extern "C",则编译不通过:
__declspec(dllimport) int __stdcall fnVCDLL(void);
同时吧VC++和C++Builder中的__stdcall换成__cdecl,重新生成lib和dll,好吧,这回C++ Builder编译报错:
_fnVCDLL 找不到,名字多了个下划线
回VC++,把fnVCDLL的名称改为_fnVCDLL,.def中的也要改,重新生成lib和dll,C++ Builder调用正常。
看来,主要还是导出函数命名约定的问题。