Question

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:

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 l'oublie.

Est-ce que ce sens de marque ou que je cassais les « règles » de COM?

Était-ce utile?

La solution

Je ne crois pas que les variables de stockage statiques sont détruites lors du déchargement dll, mais vous ne devriez pas utiliser ce à partir d'une dll de toute façon.

Je fais en général quelque chose de similaire, mais je ne prends pas la peine avec une fonction statique, je viens de faire le cteur / dtor public et laisse tomber une instance dans ma main ():

int WINAPI wWinMain(...) {
    Com::ComInit comInitGuard;
    ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top