在WM_CREATE中设置接口指针,在WM_COMMAND中变为NULL

我正在学习COM,目前没有任何特定的体系结构,我正在加载我自己的库,而不是使用COM引擎。 我加载我的库在WM_CREATE ,创build接口指针ISum,

  hServerLib = LoadLibrary(TEXT("QIPropertiesServer.dll")); if(hServerLib == NULL) { MessageBox(hwnd, TEXT("Required Library could not be found"), TEXT("Error!!"), MB_OK); DestroyWindow(hwnd); } pfnCreateComponentInstance = (PFN_FUNCTION)GetProcAddress(hServerLib, "CreateComponentInstance"); if(pfnCreateComponentInstance == NULL) { MessageBox(hwnd, TEXT("Your function is not exported from dll"), TEXT("Error!!"), MB_OK); DestroyWindow(hwnd); } pfnCreateComponentInstance(IID_ISum, (void**)&pISum); if(FAILED(hr)) { MessageBox(hwnd, TEXT("isum interface is not found"), TEXT("Error!!"), MB_OK); DestroyWindow(hwnd); } 

然后,当处理button在WM_COMMAND单击时,我尝试使用此pISum,它在那里是NULL

 switch(LOWORD(wParam)) { case IDENTITY: hr = pISum->QueryInterface(IID_ISubtract, (void**)&pISubtract); 

WindowProc中不同状态之间共享的所有变量都需要静态存储持续时间,因为WindowProc被OS重复调用。 调用之间不会保留局部变量。

您可能会将该变量作为NULL,因为您正在运行调试版本,或者运气不佳。 它可能包含随机垃圾。