如何从DLL调用函数?
我试图声明一个void指针并在其中存储GetProcAddress的结果......但是没有用。我也想宣布一个unsigned long int
(我在互联网上看到它),但后来我不知道如何继续。 :d
那么,有人会介意帮我一把吗?
答案 0 :(得分:2)
尝试这样的事情。
typedef int (*PFuncMethods)( int args );
hDLL = LoadLibrary(L"your.dll");
if( !m_hDLL )
return;
methods = (PFuncMethods)GetProcAddress(hDLL,"methods");
if ( !(methods) ) {
FreeLibrary(hDLL);
hDLL = NULL;
methods = NULL;
return;
}
if( methods(1) == 0) ...
方法名称也是您可能被卡住的地方。 C ++有重载的名称修改(即使它没有重载),这取决于编译器。您可以使用extern "C"
计算出损坏的名称或关闭该函数的修改。您可以使用depends.exe之类的工具来查看具有您必须使用的确切名称的所有函数。
使用Windows中的(导入)lib文件静态链接到DLL会更容易。
答案 1 :(得分:1)
您必须创建一个函数指针而不是void指针,并将结果存储在GetProcAddress
的函数指针中。
答案 2 :(得分:1)
您需要具有精确的函数签名,并正确地转换指针。
例如,如果这是一个接收int并返回void的函数:
typedef void (*funcptr)(int);
funcptr func = (funcptr)(void*)GetProcAddress(....)
func(17);
注意1:如果您混淆签名,可能会发生非常糟糕的事情。 注2:您还需要知道使用的调用约定(cdecl,stdcall等)
如果是你的DLL,最好考虑改为创建一个导入库。