سؤال

أنا جديد جدا على أي شيء ينطوي على نموذج كائن مكونات، وأنا أتساءل عما إذا كانت هذه الطريقة لإدارة المكالمات إلى المعجمات / المعادن المنطقية:

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::Setup() وينسي حول هذا الموضوع.

هل هذا منطقي أو أنا كسر أي "قواعد" كوم؟

هل كانت مفيدة؟

المحلول

لا أعتقد أن متغيرات التخزين الثابتة يتم تدميرها في إلغاء تحميل DLL، ولكن يجب أن لا تستخدم هذا من DLL على أي حال.

أنا عموما أن أفعل شيئا مشابها، لكنني لا أزعج وظيفة ثابتة، وأصنع فقط Ctor / DTOR عاما وإسقاط مثيل في My Main ():

int WINAPI wWinMain(...) {
    Com::ComInit comInitGuard;
    ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top