C ++调用DLL函数

时间:2018-01-10 14:52:54

标签: c++ dll

我有一个我需要从C ++程序调用的DLL。我收到了一个头文件,但它包含了奇怪格式的函数定义,我不知道如何调用它们。

例如,文档说DLL应该包含这个函数:

int InitLib();

...但是头文件只包含这个定义:

typedef int (__stdcall *lpInitLib)();

同样的事情适用于所有功能。我怎么称呼他们?

1 个答案:

答案 0 :(得分:3)

你看到的是指向功能的指针。 我想这个DLL意味着在运行时(如插件)使用LoadLibraryGetProcAddress Win API加载,而不是像常规dll那样链接它。

#include <windows.h>

lpInitLib pInitLib = NULL;
//you need to load the DLL  
HINSTANCE dllHandle = LoadLibrary("yourdll.dll");
if (NULL != dllHandle) 
{  
  pInitLib = (lpInitLib)GetProcAddress(dllHandle, "InitLib");
}
if(pInitLib != NULL ) 
    pInitLib ();

检查以下完整示例:https://msdn.microsoft.com/en-us/library/ms810279.aspx

事实上,如果你知道函数原型并且有.lib文件,你可以创建自己的头文件并用DLL链接在运行时加载它。

然后,我想,你的标题看起来应该类似于:

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllimport) int __stdcall InitLib();

#ifdef __cplusplus
}
#endif