【发布时间】:2014-02-02 22:50:22
【问题描述】:
GetProcAddress 返回一个函数指针。 假设我们得到函数 Beep 的地址(它的声明可以在 WinBase.h 中找到(当包括 Windows.h 时))
BOOL WINAPI Beep(
_In_ DWORD dwFreq,
_In_ DWORD dwDuration
);
那么经典代码可能看起来像
typedef BOOL(__stdcall *pbeep)(DWORD , DWORD );
pbeep beep = NULL;
FARPROC fptr = GetProcAddress(Hnd,"Beep");
beep = reinterpret_cast<pbeep>(fptr);
if( beep != NULL ) {
beep( 440, 1200 ); //this generates a beep for 1.2 secs...
}
一切看起来都很好并且工作正常。 我的问题:
考虑到编译器可以“以某种方式”从 WinBase.h 中包含的 Beep() 声明中获取函数指针“信息”,有什么方法可以避免 typedef 声明。 我的目标是以某种方式重新使用已经包含在已包含的 .h 文件中的信息(返回/参数/等),其中声明了 Beep() 函数,而不必在 typedef 上手动重复所有这些信息。为一个函数执行此操作时没关系,但是当函数数量增加时,这些 typedef 确实是一种痛苦和错误的一大来源。 可以吗?
编辑; 我很快就会迁移到 VS 2013 但到目前为止仍在使用 VS2008 那么这个想法就是不使用 C++11
【问题讨论】:
-
一件事——您在 typedef 示例中的返回类型不正确。在 typedef 示例中它应该是 BOOL。
-
PaulMcKenzie... Nabla 你是对的;代码现已更正
-
会用延迟加载DLL的工作吗? msdn.microsoft.com/en-us/library/151kt790.aspx
标签: c++ pointers getprocaddress