Je suis très nouveau pour tout ce qui concerne Component Object Model, et je me demande si cette méthode de gestion des appels à CoInitalize/CoUninitalize sens:Est-ce un bon moyen de gérer les initialisations de 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;
}
}}
Ensuite, tout composant qui a besoin COM appelle simplement COM::Setup()
et oublie à ce sujet. Est-ce que cela a du sens ou est-ce que je brise des "règles" de COM?
Ne peut pas l'utiliser dans une DLL. Impossible de sélectionner MTA. Les composants ne devraient jamais initialiser un appartement, les threads devraient l'être. C'est définitivement un briseur de règles. –
Le code n'est pas dans une DLL. Je ne vois pas pourquoi j'aurais besoin d'un MTA ... –