Hallo Allemaal,
Ik wil voor een applicatie een globale log maken. Dit moet werken in zowel de applicatie als in iedere DLL die wordt ingeladen. Daarom wilde ik een singleton class in een DLL gebruiken.
Helaas krijg ik dit niet werkend.
Mijn class ziet er als volgt uit (versimpeld, nog steeds zelfde probleem):
In mijn applicatie laadt ik de DLL in, zonder problemen.
Dan roep ik in de main functie van mijn applicatie een functie uit de class aan op deze manier:
Hierbij is temp een string. Als ik dit debug, wordt netjes de functie aangeroepen zoals verwacht. Echter, zodra return wordt aangeroepen in WriteConsoleEntry, wordt er een breakpoint gezet door windows.
In de output van Visual Studio zie ik dit staan:
Invalid address specified to RtlValidateHeap( 02030000, 01F34D88 )
Zelf denk ik dat er iets fout is met een type van een variabele wat wordt doorgegeven. Ik heb hier 2 dagen naar zitten zoeken, maar kan niet vinden wat er fout is. Misschien dat iemand anders wel ziet wat hier fout aan is.
PS: Ik moet toegeven dat ik nog niet lang met c++ werk.
Ik wil voor een applicatie een globale log maken. Dit moet werken in zowel de applicatie als in iedere DLL die wordt ingeladen. Daarom wilde ik een singleton class in een DLL gebruiken.
Helaas krijg ik dit niet werkend.
Mijn class ziet er als volgt uit (versimpeld, nog steeds zelfde probleem):
C++: Lib_SettingBar.h
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| class LIB_SETTINGBAR_API CLib_SettingBar { public: static CLib_SettingBar& GetInstance(void); HRESULT WriteConsoleEntry(string); private: CLib_SettingBar(); CLib_SettingBar(const CLib_SettingBar&); // Prevent copy-construction CLib_SettingBar& operator=(const CLib_SettingBar&); // Prevent assignment FILE * f; // TODO: add your methods here. }; |
C++: Lib_SettingBar.cpp
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #include "Lib_SettingBar.h" CLib_SettingBar::CLib_SettingBar() { string filename = "Console_Log.txt"; fopen_s(&f, filename.c_str(), "wt"); } CLib_SettingBar &CLib_SettingBar::GetInstance() { static CLib_SettingBar Instance; return Instance; } HRESULT CLib_SettingBar::WriteConsoleEntry(string Message) { fprintf(f, "%s", Message.c_str() ); fclose(f); return S_OK; } |
In mijn applicatie laadt ik de DLL in, zonder problemen.
Dan roep ik in de main functie van mijn applicatie een functie uit de class aan op deze manier:
C++:
1
| CLib_SettingBar::GetInstance().WriteConsoleEntry(temp); |
Hierbij is temp een string. Als ik dit debug, wordt netjes de functie aangeroepen zoals verwacht. Echter, zodra return wordt aangeroepen in WriteConsoleEntry, wordt er een breakpoint gezet door windows.
In de output van Visual Studio zie ik dit staan:
Invalid address specified to RtlValidateHeap( 02030000, 01F34D88 )
Zelf denk ik dat er iets fout is met een type van een variabele wat wordt doorgegeven. Ik heb hier 2 dagen naar zitten zoeken, maar kan niet vinden wat er fout is. Misschien dat iemand anders wel ziet wat hier fout aan is.
PS: Ik moet toegeven dat ik nog niet lang met c++ werk.