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

10.10.2014, 15:28

Methoden mit Default-Arguments in dll

Hallo,

ich habe da ein seltsames Problem. Wir benutzten seit Ewigkeiten eine dll in unserem Projekt, die über build-Skripte generiert und eingebunden wird. Man kann also davon ausgehen, dass das alles funktioniert. Nun wollte ich eine Funktion daraus um ein Default-Argument erweitern, aber sobald die dll beim Ausführen eingebunden wird, behauptet er, den Prozedureinsprungpunkt für diese Funktion nicht mehr zu finden. Es funktioniert, wenn ich einfach eine zusätzliche Funktion mit einem Parameter mehr anlege und ich hab auch schon überprüft, dass nicht versehentlich die falsche dll geladen wird.
Komischerweise existiert im selben Interface eine weitere Funktion mit Default-Parameter, die man sowohl mit als auch ohne Angabe desselbigen Problemlos aufrufen kann - wtf

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

10.10.2014, 15:33

extern "C"?

3

10.10.2014, 16:19

Schau dir mal die DLL hiermit an: http://www.nirsoft.net/utils/dll_export_viewer.html
Ich vemute der Compiler hat an den Funktionsnamen noch einige Zeichen angehängt.
Da es in C nicht möglich ist, default Argumente zu nutzen und es kein Einheitliches Schema für DLLs bei C++ gibt, hatjeder Compiler sein eigenes Prinzip für die Namen von C++Funktionen (z.B. beim Überaden, ...).

5

14.10.2014, 15:32

Ich habs mir mal per DependencyWalker angeschaut, aber sonderlich viel erkenne ich da nicht. Die Funktion ist in der DLL ohne Anhängsel vorhanden und hat auch den zusätzlichen Parameter. Nur dass der per Default gesetzt ist, kriege ich da nicht angezeigt, allerdings auch nicht bei der Funktion, für die es funktioniert.

Das mit extern "C" heißt, ich würde die DLL-Funktion aus einem Extern-C-Bereich aufrufen? Ich kann noch mal nachschauen, aber das halte ich eigentlich für ausgeschlossen.

/edit: Problem gefunden. Ich binde noch eine zweite dll in meinem Projekt ein, die eine Abhängigkeit zur geänderten dll hatte. Die war dann noch nicht neu kompiliert und kannte nur die alte Definition. Deshalb funktionierte es auch mit zusätzlicher Funktion, denn die erhält ja die alte Definition. ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sk!p« (14.10.2014, 16:18)


Werbeanzeige