我有一个我需要从C ++程序调用的DLL。我收到了一个头文件,但它包含了奇怪格式的函数定义,我不知道如何调用它们。
例如,文档说DLL应该包含这个函数:
int InitLib();
...但是头文件只包含这个定义:
typedef int (__stdcall *lpInitLib)();
同样的事情适用于所有功能。我怎么称呼他们?
答案 0 :(得分:3)
你看到的是指向功能的指针。
我想这个DLL意味着在运行时(如插件)使用LoadLibrary
和GetProcAddress
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