gpt4 book ai didi

c++ - 在 WM_CREATE 中设置接口(interface)指针,在 WM_COMMAND 中变为 NULL

转载 作者:可可西里 更新时间:2023-11-01 11:30:23 25 4
gpt4 key购买 nike

我正在学习 COM,目前没有遵循任何特定的架构,我正在加载我自己的库而不是使用 COM 引擎。我在 WM_CREATE 中加载我的库,创建指向 ISum 的接口(interface)指针,

            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 中不同状态之间共享的所有变量都需要具有静态存储持续时间,因为操作系统会重复调用 WindowProc。调用之间不会保留局部变量。

您可能会得到 NULL 变量,因为您正在调试版本中运行,或者可能只是运气不好。它也可能包含随机垃圾。

关于c++ - 在 WM_CREATE 中设置接口(interface)指针,在 WM_COMMAND 中变为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21546349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com