Also ich habe was interessantes im Debug-Protokoll gefunden:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
...
tribase.dll geladen
...
d3d37.dll geladen
...
d3d37.dll entladen
...
tribase.dll entladen...
|
Ich glaube, dass folgendes passiert:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
...
d3d37.dll entladen
...
tribase.dll soll entladen werden
DllMain wird aufgerufen mit DLL_PROCESS_DETACH
es wird festgestellt, dass die Engine nicht heruntergefahren wird -> tbExit
hier ist tbDirect3D noch nicht heruntergefahren -> tbD3D::Exit
und hier gibts nen Fehler: die Funktion SetTexture ist bereits entladen, wird aber trotzdem aufgerufen -> CRASH :!:
|
Das Problem ist imho, dass D3D eher entladen wird als TriBase.
Das müsste eigentlich gelöst werden können, afaik 3 Möglichkeiten:
1) Irgentwas einstellen, dass Tribase.dll als letzte geladen und als erste entladen wird (ist find ich die bessere), damit noch Funktionen aus den anderen DLLs benutzt werden können
2) WinMain schon in TriBase definieren, und von dort aus die Funktion tbMain aufrufen, die der Programmierer definiert hat.
3) alles statisch linken ( :x )
Ich würde 1) bevorzugen.
Hat einer von euch eine Idee, wie ich das hinbekommen könnte :cry:
(vieleicht per manifest?)