Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.06.2008, 16:58

fehler mit Dll im debugmodus

hi...

ich habe mir letztens das tutorial über die dll-programmierung angesehen, und das hat mir auch sehr gut gefallen, aber eine frage habe ich jetzt noch: Ich habe eine dll programmiert und im release-modus kompiliert, als ich dann ein projekt im debug-modus kompiliert habe, dass diese dll benutzt hat, ist das programm abgestürzt. im release modus hat es funktioniert. danach habe ich die dll noch einmal im debug modus kompiliert und dann hat es geklappt (die release exe natürlich nicht ;)). In der TriBase habe ich gesehen, dass das Makro _DEBUG angibt, ob man sich im debugmodus befindet (zumindest in vc++ in anderen IDEs hab ich keine Ahnung). David hat in der TriBase folgende Abfrage benutzt:

C-/C++-Quelltext

1
2
3
4
5
#ifdef _DEBUG
    #define TB_DLL_HANDLE (GetModuleHandle("TriBaseD.dll"))
#else
    #define TB_DLL_HANDLE (GetModuleHandle("TriBase.dll"))
#endif


wie kann man mithilfe dieser makros einstellen welche Dll/Lib datei erstellt, bzw gelade wird?

EDIT: ach ja, noch eine frage: muss man bei variablen auch __declspec(dllexport/import) benutzen?

2

11.06.2008, 22:29

Nja er kennzeichnet die Debug-Versionen durch ein D am Ende des Dateinamens. Wenn _DEBUG gesetzt ist, nimmt er einfach die DLL mit nem D dran und sonst die ohne (Release).

Zum Edit: Welche Variablen? Welcher Scope?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

3

12.06.2008, 22:11

hat er also einfach in einer nicht exportierten funktion die dll geladen?

zu den Variablen: Ich hatte einige Variablen in meiner Dll und wollte sie in meinem Projekt benutzen. Ich hatte sie nicht esportiert und in der Headerdatei nur als extern deklariert deswegen hat er die nicht erkannt. Hab jetzt einfach versucht, die Variablen mal zu exportieren. Hat auch geklappt. Aber schon mal danke für die antwort :D

4

13.06.2008, 10:36

? Er hat einfach ein Makro geschrieben was dir den richtigen DLL-Handle gibt, jenach Projekteinstellung.


Und zu deinen Variablen. Die müssten ja schon global sein. Und eine Variable zwischen den Bibliotheken hin und her zu reichen ... kein sauberes Interface ... schreib dir nen Getter & Setter dafür.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige