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

Anonymous

unregistriert

1

24.05.2004, 03:24

kryptischer export bei dll

Hallo,
kann mir einer sagen wie ich die Exportnamen einer DLL definieren kann?

Wenn ich zb eine Funktion exportiere:

Quellcode

1
2
3
__declspec(dllexport) void Init()
{
}


dann erscheint bei mir in der DLL sowas wie ?Init@@YAXXZ.
Wie kann ich daraus einen ordentlichen Exportnamen machen wie es zb bei den Standard- Windows- APIs der fall ist?

thx

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

2

24.05.2004, 12:27

Du musst soweit ich weis ein

Quellcode

1
2
3
4
extern "C"
{
...
}

darum machen damit dieses Name-Mangling (so hieß das glaube ich) verhindert wird. Dann kann man aber soweit ich weis keine Funktionen mehr überladen (in dem block).

Anonymous

unregistriert

3

24.05.2004, 14:03

Danke Jack werde ich mal testen, aber wenn man Funktionen nicht mehr überladen kann, dann wäre es wohl ein zu grosser Nachteil um es einzubauen.

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

4

24.05.2004, 14:38

Man kann nur die Funktionen die man Exportieren will nicht mehr überladen.
Insofern ist das nicht so schlimm.

5

24.05.2004, 18:32

Der Komische Export Name kommt zustande weil in C++ die Parameter ebenfalls zum Namen gehören. Dadurch ist es überhaupt möglich eine Funktion zu überladen.

In dem extern "C" Block geht das nicht da hier die C Konvention gilt. Dort gehören die Parameter nicht zum Namen und Funktionen können daher nicht überladen werden. Aber nur in diesem Block. Außerhalb gilt wieder die C++ Konvention.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

6

25.05.2004, 01:22

Hab' im Net einiges zu "Name-Mangling" gefunden und bin erstaunt darüber, dass die einzelnen Zeichen und Buchstaben tatsächlich Platzhalter sind für Variblen/Strukturen... Nur kocht hier anscheinend fast jeder Kompiler sein eigenes Süppchen.
Übrigens hätte ich das Buch von David mal zu Ende lesen sollen, denn in Kapitel 9.8.3 schreibt er dazu auch was.

Dragon ich werde extern "C" in dem Block verwenden der für Init und Destroy in meiner Engine zuständig ist, da dies sowieso die einzigen beiden Funktionen sind die public sein sollen brauch ich in dem Fall sowieso nicht die Fähigkeit zum überladen.

Werbeanzeige