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

02.02.2004, 18:12

dllimport vs. dllexport

blöde frage, aber wie löse ich es am geschicktesten,
das bei meiner dll meine API-konstante automatisch
__declspec(dllexport) und ansonsten __declspec(dllimport)
ist?

bis jetzt durfte ich das immer per hand ändern, das nervt.

2

02.02.2004, 18:30

Ganz einfach. Über ein API Makro ;D

Du schreibst dein API Makro in eine Header api.h z.B.

Quellcode

1
2
3
4
5
if define(EXPORT_DLL)
  #define MYAPI  __declspec(dllexport)
#else
  #define MYAPI __declspec(dllimport)
#endif


So nun schreibst du überall, wo du normalerweise __declspec(dllexport(dllimport) hinschreibst, einfach MYAPI.

Dann Definierst du in deiner Compilereinstellung einfach EXPORT_DLL für dein DLL Projekt. Das machst du dort wo z.B. auch _DEBUG steht.

Schon ists fertig.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

3

02.02.2004, 19:48

hm okay. nur mich wunderts, dass er beim meinem programm
(also nicht bei der dll) auch eine .lib und .exp datei erstellt.
das spricht doch dafür, das er irgendwo __declspec(dllexport)
benutzt sonst würde er nix exportieren oder ?

4

02.02.2004, 22:16

Ja das habe ich auch. Weis auch nicht woran das liegen kann. Es ist einfach schwachsinn Sachen aus eine EXE zu exportieren. Das muss ein Bug im Compiler sein.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

5

03.02.2004, 16:11

das das ein bug im compiler ist glaub ich nicht:

wenn man bei seinem projekt explizit dllimport angebit anstatt
dieses makro zu benutzen, dann wird auch nix exportiert (keine lib & exp)

ich denke wirklich das bei diesem makro irgendwie im exe-projekt
dllexport eingesetzt wird.

6

03.02.2004, 16:30

Dann muss es ein Bug sein und zwar im PräProzessor. Dieser sollte nämlich dafür sorgen das überall "dllimport" eingesetzt wird und nicht "dllexport". Dafür ist ja das Makro da. Da der PräProzessor nicht einmal zum Standard von C oder C++ gehört bekommt der Compiler nicht einmal eine PräProzessor Anweisung zu gesicht und damit auch nicht der Linker.

Oder du hast irgendwo ein falsches Makro Definiert ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

7

03.02.2004, 17:18

äh...sagtest du nicht, dass du das problem kennst?
ergo, hast du dann auch ein falsches makro ?! }>

8

03.02.2004, 19:00

Darum ist es ja auch ein Bug ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

9

06.02.2004, 09:34

Hi,
guckt euch doch einfach "TRIBASE_EXPORTS" in "TriBase.h" der TriBase-Engine von David an...
nofi

10

06.02.2004, 14:03

Das schaut so aus

Quellcode

1
2
3
4
5
#ifdef TRIBASE_EXPORTS
#define TRIBASE_API __declspec(dllexport)
#else
#define TRIBASE_API __declspec(dllimport)
#endif
und ist damit Identisch mit meinem Beispiel ;) Ist ja auch die Standardversion des Makros. Trotzdem erstellt er mir immer eine LIB.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige