c++builder2007调用VC的dll:

在VC中编写DLL时,使用了.def文件,在出口函数声明时也在前面加上了__declspec(dllexport)说明。把VC生成的DLL文件放在了当前目录下,使用BCB的命令行工具implib生成的.lib文件,具体格式为implib bcb.lib vc.dll,再把implib根据dll生成的LIB文件加入到工程中,再在工程中加入DLL出口函数的声明(函数名前加上了WINAPI,即__stdcall;每一个函数定义的最前面也加上了__declspec(dllimport))。 并且因为BCB和VC++成立函数名转换的作法不一样。因此在VC中最好是输出函数为C函数的DLL,若是输出函数是C++类,则可能没法调用。 个人解决办法(通过本人实验证实的,共2种) 方法1:VC编译c文件生成dll时导出函数头文件加上extern "C"{}关键字,函数声明和定义处再加调用约定描述符__cdecl,而后将函数声明和定义处都加上一个下划线就没有问题了。 EXAMPLE: 假设我VC的dll中包含int myFunction(void),.c文件中函数实现处的正确写法是: __declspec(dllexport) int __cdecl _myFunction(void) {         // add your code here } .h文件中函数声明处的正确写法以下 __declspec(dllexport) int __cdecl _myFunction(void); BCB调用时只要包含lib文件,具体操做步骤: 运行implib bcb.lib vc.dll project->add to...下拉框中选择.lib类型,打开刚才经过implib和vc的dll生成的lib文件 在工程中用到dll的.c源文件中包含该dll的头文件 调用时直接写 int i = myFunction(); 便可。 方法2:仅对VC编译C文件生成dll时有效,导出函数头文件加上extern "C"{}关键字。BCB的Project->option->advanced compiler下的Calling convention中选择Stdcall就能够直接调用VC的.c文件编译生成的动态连接库了。
相关文章
相关标签/搜索