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.07.2007, 23:02

Importbibliothek und Warnungen (VC++)

Ich mache einen neuen Thread auf, weil ich mich jetzt nur noch auf VC++ Express beziehe:

1. Ich möchte eine DLL erstellen und dazu soll auch eine Importbibliothek mit der Endung '.lib erstellt werde.

Die DLL wird wunderbar erzeugt, aber von einer lib ist nichts zu sehen...
Dabei steht unter den Projekteigenschaften->Linker->Erweitert unter der Option "Importbibliothek" folgendes:
$(TargetDir)$(TargetName).lib

Warum aber wird mir keine erstellt?


2. Ich arbeite mit der Allegro Bibliothek und includiere deshalb logischerweise allegro.h.
Allerdings haut mir VC++ 32 Warnung um die Ohren beim kompillieren und alles betrifft den allegro.h Header...
Die Warnung sieht jedes mal so aus "'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'unsigned short *'"
Also erstens eine Sache die mich nicht interessiert, weil ich darauf vertraue dass Allegro funktioniert und zweitens kann ich es auch nicht ändern... Allegro ist nun mal eine fertige Bibliothek...
Abschalten kann ich das ganze nur indem ich die Warnstufe auf 0 setze...

Kann man dem nicht anders angewöhnen eifnach diesen Header ohne Warnungen hinzunehemen?

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

11.07.2007, 23:21

zu 1: du musst deine klassen bzw funktionen exportieren

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#ifdef WIN32
    #ifdef EXPORTING
        #define EXPORT __declspec ( dllexport )
    #else
        #define EXPORT __declspec ( dllimport )
    #endif //EXPORTING

#else 
    #define EXPORT

#endif //Win32


class EXPORT Klasse //...


EXPORTING dann in den projekteigenschaften deiner lib definieren, so dass es nur existiert, wenn du dein projekt kompilierst, aber nicht, wenn jemand anders die header einbindet.

3

11.07.2007, 23:34

zu 1:
1. 1. Reicht es dann EXPORT nur bei Funktionsdeklarationen aufzuführen, oder muss es auch bei Definitionen stehen?
1. 2. Ist WIN32 ein standartisiertes Makro? Also würde es auch der GCC unter Windows erkennen? Wie funktioniertniert das bei anderen Betriebsystemen?
1.3

Zitat von »"rewb0rn"«

EXPORTING dann in den projekteigenschaften deiner lib definieren, so dass es nur existiert, wenn du dein projekt kompilierst, aber nicht, wenn jemand anders die header einbindet.

Ist das nicht egal? So lange der Header von anderen nur dazu benutzt wird, die Funktionsdeklarationen zu haben kann doch sowieso nichts exportiert werden... dehalb müsste ich das mit dem EXPORTNG auch weglassen können oder?

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

11.07.2007, 23:47

1.1 es reicht in der deklaration (wenn du deine klasse exportierst brauchst du nat. nicht mehr die methoden extra zu markieren)
1.2 denke es ist std, aber sicher bin ich nicht.
1.3 nein, du musst ja importieren, wenn du sie von außen benutzen willst.

5

11.07.2007, 23:51

1.3. Das tue ich doch in dem ich dann die Imporbibliothek linke...

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

11.07.2007, 23:55

probiers aus, es wird nicht gehn :)

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

7

11.07.2007, 23:56

Beim Erstellen eines VC++ Dll Projektes wird übrigens schon eine Präprozessordefinition eingestellt, ich glaub es ist <projektname>_EXPORTS, bin mir aber nicht sicher - auf jeden Fall ist somit unter VC++ der Schritt mit EXPORTING unnötig.

8

12.07.2007, 00:22

Ich habe sowieso gerade eine anderes Problem...

Quellcode

1
MSVCRTD.lib(crtexe.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup".


In meiner datei main.cpp ist aber definitiv die int main() funktion... ich bin schließlich nicht doof und code schon seit einigen Jahren in C++ nur halt nicht mit Windows und VC++ Express...
Es ist übrigens eine Konsolenanwendung... also nix mit WinMain...

Werbeanzeige