Frage

Ich bin sehr neu für etwas Component Object Model beteiligt, und ich frage mich, ob diese Methode der Anrufe an CoInitalize / CoUninitalize macht Sinn zu verwalten:

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;
}

}}

Dann kann jede Komponente die Bedürfnisse COM nur Anrufe COM::Setup() und vergisst es.

Ist das sinnvoll oder breche ich alle „Regeln“ von COM?

War es hilfreich?

Lösung

Ich glaube nicht, dass die statischen Speichervariablen auf DLL Entladen zerstört werden, aber man sollte das nicht von einer dll sowieso werden.

ich im Allgemeinen etwas ähnliches, aber ich nicht die Mühe mit einer Funktion statisch, ich mache nur den ctor / dtor öffentlichen und falle eine Instanz in meinem main ():

int WINAPI wWinMain(...) {
    Com::ComInit comInitGuard;
    ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top