هل هذه طريقة جيدة لإدارة تهيئة كوم؟
-
19-09-2019 - |
سؤال
أنا جديد جدا على أي شيء ينطوي على نموذج كائن مكونات، وأنا أتساءل عما إذا كانت هذه الطريقة لإدارة المكالمات إلى المعجمات / المعادن المنطقية:
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;
...
لا تنتمي إلى StackOverflow