Я пишу небольшую оболочку, чтобы ознакомиться с некоторыми важными темами в C ++ (WinAPI, COM, STL, OOP).На данный момент мой класс сможет создать (дочернее) окно.Главным образом, это окно связано с глобальным циклом сообщений, который распределяет сообщения в локальный цикл нужного экземпляра (глобальный - статический, локальный - виртуальный).
Очевидно, что есть, конечно, лучшие способы сделать это, но я использую std :: maps для хранения HWND и их указателя экземпляра парами (цикл Global ищет указатель с параметром HWND, получает самуказатель с карты и затем вызывает локальный цикл).
Теперь кажется, что карта не принимает никаких значений по неизвестной причине.Кажется, он выделяет достаточно места, но в любом случае что-то пошло не так [(ошибка) 0 отображается вместо записей в Visual C ++).
Я также посмотрел это в google и обнаружил, что карты вызывают некоторыепроблема при использовании в классах и DLL.Может ли это быть причиной и есть ли какое-либо решение ??
Защищенная область видимости класса: static std::map<HWND,MAP_BASE_OBJECT*> m_LoopBuf
Реализация в .cpp-файле: std::map<HWND,MAP_BASE_OBJECT*> HWindow::m_LoopBuf;
OK,потому что вы просили больше кода, вот вы:
Я на самом деле не импортирую DLL, потому что я использую COM.`HRESULT hr = S_OK;int retval = 1;MSG msg = {0};
IClassFactory* Class = NULL;
IWindow* Wnd= NULL;
hr = CoInitialize(NULL);
hr = CoCreateInstance(CLSID_IWindow,NULL,CLSCTX_INPROC_SERVER,IID_IWindow,(LPVOID*)&Wnd);
Wnd->CreateOverlappedWindow(L"My window",L"MyClass",250,250,250,250,0,0,0,0,0,hInst);
while (GetMessage(&msg,NULL,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Wnd->Release();
return hr;
COM-объект IWindow реализован в классе HWindow (в DLL).Пример программы работает хорошо до "CreateOverlappedWindow".