我很新的,涉及组件对象模型什么的,我想知道,如果管理调用CoInitalize/CoUninitalize的这种方法是有道理的:这是管理COM初始化的好方法吗?
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中。无法选择MTA。组件不应该初始化公寓,线程应该。这绝对是一个破坏者。 – 2010-03-12 04:49:04
该代码不在DLL中。我不明白为什么我需要一个MTA ...... – 2010-03-12 16:10:19