[英]Setting interface pointer in WM_CREATE, becomes NULL in WM_COMMAND
我正在学习COM,目前没有遵循任何特定的架构,我正在加载自己的库而不是使用COM引擎。 我在WM_CREATE
加载我的库,创建指向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);
}
然后,当处理按钮单击WM_COMMAND
,我尝试使用此pISum,它在那里是NULL
。
switch(LOWORD(wParam))
{
case IDENTITY:
hr = pISum->QueryInterface(IID_ISubtract, (void**)&pISubtract);
WindowProc中不同状态之间共享的所有变量都需要具有静态存储持续时间,因为OS会重复调用WindowProc。 调用之间不会保留局部变量。
您可能会将变量视为NULL,因为您在调试版本中运行,或者可能只是运气不好。 它可能包含随机垃圾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.