如何从dll调用函数?

时间:2010-06-10 17:24:21

标签: c++ c dll function call

如何从DLL调用函数?

我试图声明一个void指针并在其中存储GetProcAddress的结果......但是没有用。我也想宣布一个unsigned long int(我在互联网上看到它),但后来我不知道如何继续。 :d

那么,有人会介意帮我一把吗?

3 个答案:

答案 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,最好考虑改为创建一个导入库。