怎样在BCB中使用VC的dll

来源:互联网 发布:qq堂支持mac吗 编辑:程序博客网 时间:2024/04/30 22:37

VC生成的DLL,要想在BCB中使用,需要注意"函数名和调用约定"的问题(比如函数名为MyFun1和_MyFun2):
1)如果DLL的函数,使用"__cdecl"作调用约定的,则函数名MyFun1会变成_MyFun1,_MyFun2会变成MyFun2
2)如果DLL的函数,没有使用明显的调用约定的(BCB会默认用__cdecl作调用约定),则函数名MyFun1也会变成_MyFun1,_MyFun2会变成MyFun2
3) 如果DLL的函数,使用"__stdcall"的调用协定,则函数名MyFun1和_MyFun2不会有任何变化

对于3)的调用约定,只需要使用BCB的工具implib xxx.lib xxx.dll,生成xxx.lib,将它xxx.lib和头文件xxx.h加到BCB的项目中,就可以直接调用,象调用win api一样

对于1)和2)的调用约定,则需要
a) impdef xxx.def xxx.dll
b) 编辑xxx.def,修改函数名,规则就是上面的1)和2)
c) implib xxx.lib xxx.def
d) 将生成的xxx.lib和头文件xxx.h加到BCB的项目中,就可以直接调用,象调用win api一样简单

至于函数名使用何种调用约定,可以查看dll的头文件xxx.h,另外需要注意的是:如果要在c++中使用这些dll,需要有extern "C"作前缀. 这里有个xxx.h的格式:

#ifdef __cplusplus
extern "C" {
#endif

#ifdef INJECT_EX_EXPORTS
#define HOOKDLL_API __declspec(dllexport)
#else
#define HOOKDLL_API __declspec(dllimport)
#endif
extern int HOOKDLL_API g_bSubclassed;
extern int HOOKDLL_API g_bReturn;

HOOKDLL_API int MyFun1( HWND hWnd, HWND hMainWnd = NULL );

#ifdef __cplusplus
}
#endif

 

原创粉丝点击