A.dll头文件导出函数声明如下:
开发环境VC++ 6.0
typedef void *TESTHANDLE;
extern "C" __declspec(dllexport) int __stdcall TEST_Init(TESTHANDLE *hHandle);
extern "C" __declspec(dllexport) int __stdcall TEST_Exit(TESTHANDLE hHandle);
……
现在test工程需要动态调用该 A.dll
限定**只能使用LoadLibrary("KCBPCli.dll")动态调用**方式,请问怎么动态调用上述两个函数
LoadLibrary得到dll句柄,接下来GetProcAddress得到指针,在你程序中定义函数指针,然后直接调用
具体google下就有
我是查过资料的 关键在于定义对应的函数指针时,不知道针对上述我给的那两个函数对应的参数类型怎么去定义,还望直接指出来。
int (*func)(TESTHANDLE *);
TESTHANDLE 应该是一个句柄,你需要知道你调用TEST_Init的时候,你需要传递什么进去,可能直接定义个TESTHANDLE 变量就可以了,函数内部会给这个变量赋值
KCBPCLIHANDLE hHandle;
后赋给test_init报错:
warning C4700: local variable 'hHandle' used without having been initialized
KCBPCLIHANDLE hHandle = 0;
加上这一行
//------------------------------------------------
typedef void * TESTHANDLE;
//------------------------------------------------
extern "C"
{
int (__stdcall * TEST_Init)(TESTHANDLE * hHandle);
int (__stdcall * TEST_Exit)(TESTHANDLE hHandle);
}
//------------------------------------------------
int load_my_dll(const wchar_t *filename)
{
HINSTANCE hlib;
hlib = LoadLibraryW(filename);
if(hlib != NULL)
{
void *hfun;
hfun = GetProcAddress(hlib, "TEST_Init");
memcpy(&TEST_Init, &hfun, sizeof(hfun));
hfun = GetProcAddress(hlib, "TEST_Exit");
memcpy(&TEST_Exit, &hfun, sizeof(hfun));
return S_OK;
}
return E_FAILED;
}
再用GetProcAddress得到函数的指针,再定义函数指针类型,再用这个类型定义变量,修改变量为真实函数指针,然后就可以直接调用了
大概这么用,你的导出函数,不知这两个吧,用法类似
传入一个 TESTHANDLE 或者它的地址
TESTHANDLE hTest=NULL;
//1)装入DLL
//2)取出函数
.//3)调用函数
TEST_Init(&hTest);
。。。。。。。。。。
TEST_Exit(hTest);
//4)释放DLL,如果多次Load ,释放后设置函数指针为NULL,DLL的HANDLE为NULL
L