繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM