我很新的,涉及组件对象模型什么的,我想知道,如果管理调用CoInitalize / CoUninitalize的这种方法是有道理的:

COM.hpp:

#pragma once

namespace WindowsAPI { namespace ComponentObjectModel {

class COM
{
    COM();
    ~COM();
public:
    static void Setup();
};

}}

COM.cpp:

#include <Windows.h>
#include "COM.hpp"

namespace WindowsAPI { namespace ComponentObjectModel {

COM::COM()
{
    if (CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) != S_OK) throw std::runtime_error("Couldn't start COM!");
}

COM::~COM()
{
    CoUninitialize();
}

void COM::Setup()
{
    static COM instance;
}

}}

然后需要COM只是调用COM::Setup()和忘记关于它的任何部件。

这是否有道理还是我打破任何COM“规则”?

有帮助吗?

解决方案

我不相信,静态存储变量上的dll卸载摧毁,但你不应该使用反正这从一个DLL。

我一般做类似的事情,但我不具有功能打扰静态的,我只是做了构造函数/析构函数公众和删除实例我的主要():

int WINAPI wWinMain(...) {
    Com::ComInit comInitGuard;
    ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top