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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

1

15.11.2010, 21:58

__dllimport und __dllexport

Hi

Ich wollte heute eine DLL programmieren und habe dabei eine Makrodefinition für den Export und Import gemacht.

C-/C++-Quelltext

1
2
3
4
5
#ifdef VISUAL_EXPORTS
#define VE_API __declspec(dllexport)
#else
#define VE_API __declspec(dllimport)
#endif


Wenn ich nun eine Deklaration einer Funktion mache funktioniert es.

C-/C++-Quelltext

1
VE_API veResult veInit();


Wenn ich allerdings eine Definition einer Funktion mache funktioniert es nicht.

C-/C++-Quelltext

1
2
3
VE_API veResult veInitLog()
{
}


Und es kommt folgende Meldung: eine als dllimport deklarierte Funktion darf nicht definiert werden.

Was habe ich falsch gemacht?

LG Patrick

2

15.11.2010, 22:06

Hast du VISUAL_EXPORTS in den Projekteinstellungen als define reingepackt?

Bei VS2010 ists: Rechtsklick aufs Projekt->Eigenschaften->Konfigurationseigenschaften->C/C++->Präprozessor->Präprozessordefinitionen(ganz oben) da einfach VISUAL_EXPORTS hinzufügen.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

15.11.2010, 22:27

Ich glaub du brauchst bei der Funktionsdefinition das VE_API nicht mehr... lass es mal bei der definition weg

Aber Genion hat glaub ich auch recht

4

15.11.2010, 22:44

Heißt dein Projekt Visual ? Bei VC++ sollte für DLL's PROJEKTNAME_EXPORTS automatisch definiert sein.

Gruß
SaRu_

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

5

16.11.2010, 11:02

VE_API wird nur bein der Deklaration verwendet.
Du solltest darüber nachdenken auch den Fall des statischen linkens deiner Bibliothek zu berücksichtigen, je nachdem ob es Sinn ergibt oder nicht.
Das würde dann so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#ifndef STATIC_LIB 
    #ifdef VISUAL_EXPORTS
        #define VE_API __declspec(dllexport)
    #else
        #define VE_API __declspec(dllimport)
    #endif
#else
    #define VE_API
#endif


STATIC musst du dann als Präprozzessor-Define angegeben, wenn du die Bibliothek statisch kompilieren willst( und natürlich die entsprechende Änderung in den Projekteinstellungen machen).

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Werbeanzeige