gpt4 book ai didi

c++ - CComPtr CoCreateInstance 返回 0x80070582(类已存在。)

转载 作者:行者123 更新时间:2023-11-30 03:10:50 34 4
gpt4 key购买 nike

当用户按下登录按钮时调用 StartComObjects 函数,当用户按下取消按钮时调用 StopComObjects 函数。 StartComObjects 函数使用 CComPtr.CoCreateInstance 创建 COM 对象并使用 AfxConnectionAdvise 设置一些连接点。当用户按下“取消”按钮时,使用 AfxConnectionUnadvise 断开连接点,并且在调用 CComPtr 上的 Release 之前停止 COM 对象。

当我第二次按下登录按钮时,CComPtr.CoCreateInstance 返回 0x80070582(类已存在)。这可以防止在第二次调用 StartComObjects 时创建 COM 对象。我不确定为什么这不起作用。 CComPtr::Release 不应该释放 COM 对象并允许我在旧对象停止后创建一个新对象吗?有什么办法可以解决这个问题吗?

最佳答案

这是 Windows 错误(设备 7,错误代码 1410),由 RegisterClass(Ex) 引起。此示例代码再现了它:

#include "stdafx.h"
#include <windows.h>
#include <assert.h>

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int)
{
WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.hInstance = hInstance;
wcex.lpszClassName = L"Example";
ATOM at1 = RegisterClassEx(&wcex);
assert(at1 != 0);
// Register again, should fail with error 1410
ATOM at2 = RegisterClassEx(&wcex);
assert(at2 == 0);
int err = GetLastError();
assert(err == ERROR_CLASS_ALREADY_EXISTS);
return 0;
}

查看您的代码,寻找 coclass 使用 RegisterClass(Ex) 的地方。当实例被销毁时,它必须使用 UnregisterClass。或者避免再次注册窗口类。或者忽略具体的错误代码。

关于c++ - CComPtr CoCreateInstance 返回 0x80070582(类已存在。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2858979/

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