我有一个需要检测插入新设备的应用。 但我在“wndClass.lpfnWndProc = reinterpret_cast(WndProcTest);”上收到错误。错误是“必须调用成员函数或其地址”。 我使用Borland C ++ builder 6。 也许有人知道我做错了什么?
我的代码AppMainForm.cpp:
bool TAppMainForm::InitWindowClass()
{
WNDCLASSEX wndClass;
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wndClass.hInstance = reinterpret_cast<HINSTANCE>(GetModuleHandle(0));
wndClass.lpfnWndProc = reinterpret_cast<WNDPROC>(WndProcTest );
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hIcon = LoadIcon(0,IDI_APPLICATION);
wndClass.hbrBackground = CreateSolidBrush(RGB(192,192,192));
wndClass.hCursor = LoadCursor(0, IDC_ARROW);
wndClass.lpszClassName = g_szClassName;
wndClass.lpszMenuName = NULL;
wndClass.hIconSm = wndClass.hIcon;
if ( ! RegisterClassEx(&wndClass) )
{
//ErrorHandler(TEXT("RegisterClassEx"));
return false;
}
return true;
}
INT_PTR WINAPI TAppMainForm::WndProcTest(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
// do something
}
标题文件:
public:
bool InitWindowClass();
INT_PTR WINAPI WndProcTest(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
答案 0 :(得分:0)
您遇到的问题是您尝试获取C ++成员函数的地址并将其指定给指向C函数的指针lpfnWndProc
。
答案 1 :(得分:0)
解决此问题的可能方法:
将成员函数设为静态
不要使用成员函数
将函数声明为静态
静态 INT_PTR WINAPI WndProcTest(....) { // 做点什么 }
wndClass.lpfnWndProc = reinterpret_cast(InitWindowClass::WndProcTest);
使 WndProcTest 成为老式的 C 函数(并将其从类中删除):
INT_PTR WINAPI WndProcTest(....) { // 做点什么 }