bcb6中:
extern "C" __declspec(dllexport) void __stdcall ShowF(void);
void _export _stdcall ShowF(void)
{
ShowMessage("kkkkkkkkkkkkk");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1、用extern "C"修饰C++Builder导出的DLL函数。如:extern "C" __declspec(dllexport) int aFunc(int a);
2、用C++Builder的impdef工具生成DLL对应的def文件。如:impdef xxx.def xxx.dll。
3、用记事本打开xxx.def文件,删去每个函数名前的"_"。如原来的def文件为:vc++中:
LIBRARY XXX.DLL
EXPORTS
___CPPdebugHook @2 ; ___CPPdebugHook
_aFunc @1 ; _aFunc
那么删除后就变成了:
LIBRARY XXX.DLL
EXPORTS
__CPPdebugHook @2 ; ___CPPdebugHook
aFunc @1 ; _aFunc
4、用VC的LIB工具,根据上面的def文件生成lib文件。如:LIB /DEF:XXX.def。生成lib文件之后,VC便可以使用这个lib文件了。
两种工具开发的DLL在相互使用的时候,主要的问题便是lib库的问题,能把这一问题解决好行了。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void (*ShowF)(void);
HINSTANCE hInst = LoadLibrary(_T("C:\\dlllllllllllllllllllllllllllll\\dllllllll\\dllllllll\\Debug\\myDLL.dll"));
if (hInst == NULL)
{
int xx = GetLastError();
FreeLibrary(hInst);
system("pause");
return;
}
(FARPROC &)ShowF=GetProcAddress(hInst,"ShowF");
ShowF();
FreeLibrary(hInst);
OnOK();