繁体   English   中英

如何从dll调用函数?

[英]How can I call a function from a dll?

如何从DLL调用函数?

我试图声明一个空指针,并将GetProcAddress的结果存储在其中……但是没有用。 我还想声明一个unsigned long int (我在互联网上的某个地方看到了它),但是后来我不知道如何继续。 :d

那么,有人愿意帮我吗?

尝试这样的事情。

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"来计算变形的名称或关闭该函数的extern "C" 您可能会使用诸如depends.exe之类的工具来查看所有具有必须使用的确切名称的功能。

在Windows中使用(import)lib文件静态链接到DLL要容易得多。

您必须创建一个函数指针而不是一个空指针,并将结果存储在GetProcAddress那个函数指针中。

您需要具有准确的函数签名,并正确地转换指针。

例如,如果这是一个接收int并返回void的函数:

typedef void (*funcptr)(int);
funcptr func = (funcptr)(void*)GetProcAddress(....)
func(17);

注意1:如果混淆了签名,则可能会发生非常糟糕的事情。 注意2:您还需要知道所使用的调用约定(cdecl,stdcall等)。

如果是您的DLL,则最好考虑制作一个导入库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM