lz动态调用时函数调用规范没有匹配吧
在BCB中默认是_cdecl,函数输出前会带下划线,
最好在dll和函数指针声明处都用一样的调用规范
比如dll中
void __stdcall setDevName(PCHAR);
函数指针声明
typedef void (__stdcall *ThesetDevName)(PCHAR); 下面是copy来的
VC调用c++builder的dll: (参考:MSDN2000)
VC中无LIB时的DLL隐式链接,制作与VC++相符合的LIB函数符号输入库(转)请大家注意!这种方法只能应用于输出为C格式的__stdcall调用方式!
1.使用VC++的工具DUMPBIN将DLL中的导出函数表导出到一定义(.DEF)文件
EXAMPLE:
DUMPBIN VideoDeCoder.dll /EXPORTS /OUT:VideoDeCoder.def
2.将导出的.DEF文件整理为一符合.DEF个数的函数导出文件(整理过程巨乱巨复杂,懒得举例了,后面有简便方法^_^)
3.使用VC++的LIB工具,带/DEF:(.def文件名) /MACHINE:IX86(80X86机器),就输出符合VC++格式的的LIB文件了.
EXAMPLE:
LIB/DEF:VideoDeCoder.def /MACHINE:IX86
4.连接时带上LIB文件链接;注意的是当有些动态库DUMPBIN的只有函数名,无"@nn"的参数格式,如C++Builder写的DLL,输出就只有函数名符号,链接时就会报错:
error LNK2002:unresolved external symbol "functionname@nn"
提示程序中引入的函数符号无法识别,这时只要将DEF文件中相应的函数名称改为functionname@nn方式,重新建立LIB,重新链接即可.
这样就制作成功了符合VC调用方式的LIB了!要值得一说的是!BORLAND C++BUILDER有一个很好的工具IMPDEF可以直接将DLL中的函数输出到.DEF文件中,这种方法只能应用于输出为C格式的__stdcall调用方式,只要做一点点修改就可以成为符合VC的DEF文件!
IMPDEF xxx.def xxx.dll
只要将BCB的DEF文件中函数申明格式转换为vc识别的格式就可以利用LIB工具生成LIB;要使用C分格输出(extern "C")才是必须的!而且别忘了在DEF文件中的函数申明不要带“_”啊!:)不然会出现error LNK2001的链接错误!
vc调用bcb的我没试过,不过可以参照上面的格式自己改改好了:)