BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress(
kernel32, "GlobalMemoryStatusEx");
这是在.cpp文件中。在编译上面的代码时,我收到以下错误。
error C2440: 'initializing' : cannot convert from 'FARPROC' to 'BOOL (__cdecl *)(LPMEMORYSTATUSEX)'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
我似乎无法弄清楚我应该将GetProcAddress
函数转换为什么。
有人可以指出我正确的方向吗?
由于
答案 0 :(得分:7)
您需要将其强制转换为函数指针类型。为简化起见,请对函数指针类型使用typedef
:
typedef BOOL (WINAPI *gmse_t)(LPMEMORYSTATUSEX);
gmse_t gmse = (gmse_t)GetProcAddress(kernel32, "GlobalMemoryStatusEx");
MSDN上的GetProcAddress()
参考页提供了示例代码。
答案 1 :(得分:1)
您需要转换从GetProcAddress
获得的通用指针。
所以,而不是当前的
BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress(
kernel32, "GlobalMemoryStatusEx");
DO
auto const gmse = reinterpret_cast<BOOL (WINAPI*)(LPMEMORYSTATUSEX)>(
GetProcAddress( kernel32, "GlobalMemoryStatusEx" )
);
除了添加const
之外,我还会为该函数指针使用更自我记录的名称,比如,调用它GLobalMemoryStatusEx
呢?
答案 2 :(得分:0)
另一种优雅的解决方案(这只是Cheers和hmjd答案的完美结合)可以是:
typedef BOOL (WINAPI *gmse_t)(LPMEMORYSTATUSEX);
gmse_t gmse;
gmse = reinterpret_cast<gmse_t>(
GetProcAddress( kernel32, "GlobalMemoryStatusEx" )
);