如何编写一个宏,用来载入给定名字和参数列表的dll函数

载入dll中的函数得三个步骤:

typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
MYFUNC yourFuntionName = NULL;
yourFuntionName = (MYFUNC)GetProcAddress(hDllInst,"yourFuntionName");

函数一多就很麻烦,因为每个函数都得写三个名字/字符串:MYFUNC、yourFuntionName、"yourFuntionName"。

我对宏的编写不太熟悉。不知道能不能编写一个宏,简化这些步骤?

一种需求是把这三行代码换成一个宏,类似这样

IMPORT_DLL_FUNC(hDllInst, yourFuntionName, 返回值, 参数1, 参数2, 参数3)

就能相当于上面三行

一种需求是把声明和赋值分开两个宏,类似这样就相当于最前面前两行

DEF_DLL_FUNC(yourFuntionName, 返回值, 参数1, 参数2, 参数3)

类似这样就相当于最前面第三行

IMPORT_DLL_FUNC(hDllInst, yourFuntionName)
阅读 2.8k
1 个回答
template<typename Ret>
auto load(HMODULE handle, const char *funcName) -> Ret*
{
    return (Ret *) GetProcAddress(handle, funcName);
}

然后就可以这样用

auto _myMax = load<int(int, int)>(hmodule, "myMax");
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题