错误C2440:'初始化':无法从'LPVOID'转换为'UINT

0 c++

我在尝试将代码从C转换为C++时遇到以下错误:

错误C2440:'初始化':无法从'LPVOID'转换为'UINT(__ cdecl*)(LPVOID,UINT,LPWSTR,UINT)'

这是造成问题的代码段:

UINT (*GetString)( LPVOID rsrc, UINT res, LPWSTR buf, UINT len )
       = (LPVOID)0x4347e0;
Run Code Online (Sandbox Code Playgroud)

我如何解决它?

JBR*_*son 6

您试图说服编译器将0x4347e0(类型为'int')视为指向采用4个参数的函数的指针.将int转换为LPVOID不会满足编译器 - 您需要将其强制转换为正确的东西:

typedef UINT (*GetStringFnPtr)(LPVOID rsrc, UINT res, LPWSTR buf, UINT len );
GetStringFnPtr GetString = (GetStringFnPtr)0x4347e0;
Run Code Online (Sandbox Code Playgroud)