Frage zu meiner DLL
Übersicht

schalliBetreff: Frage zu meiner DLL |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab mal eine kleine Testdll gemacht:
Hab folgenden code in Borland C++ Builder eingegeben: Code: [AUSKLAPPEN] /---------------------------------------------------------------------------
#include <windows.h> //--------------------------------------------------------------------------- // Wichtiger Hinweis zur DLL-Speicherverwaltung, falls die DLL die statische // Version der Laufzeitbibliothek (RTL) verwendet: // // Wenn die DLL Funktionen exportiert, die String-Objekte (oder Strukturen/ // Klassen, die verschachtelte Strings enthalten) als Parameter oder Funktionsergebnisse übergibt, // muß die Bibliothek MEMMGR.LIB im DLL-Projekt und anderen Projekten, // die die DLL verwenden, vorhanden sein. Sie benötigen MEMMGR.LIB auch dann, // wenn andere Projekte, die die DLL verwenden, new- oder delete-Operationen // auf Klassen anwenden, die nicht von TObject abgeleitet sind und die aus der DLL exportiert // werden. Durch das Hinzufügen von MEMMGR.LIB wird die DLL und deren aufrufende EXEs // angewiesen, BORLNDMM.DLL als Speicherverwaltung zu benutzen. In diesem Fall // sollte die Datei BORLNDMM.DLL zusammen mit der DLL weitergegeben werden. // // Um die Verwendung von BORLNDMM.DLL, zu vermeiden, sollten String-Informationen als "char *" oder // ShortString-Parameter weitergegeben werden. // // Falls die DLL die dynamische Version der RTL verwendet, müssen Sie // MEMMGR.LIB nicht explizit angeben. //--------------------------------------------------------------------------- #define BBDECL extern "C" _declspec(dllexport) #define BBCALL _stdcall #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- BBDECL char* BBCALL Hallo (void) { return "Hallo"; } habe es zu einem Projekt Namens Project2 hinzugefügt. Dann bin ich im Menü Projekt auf Project2 erstellen gegangen. Die dll habe ich mit folgendem userlib in den userlib ordner geschoben Code: [AUSKLAPPEN] .lib "Project2.dll"
Project2_Hallo$() Die Funktion Projekt2_Hallo wurde erkannt aber leider hat es die dll Funktion nicht gefunden... Kann mir jemand helfen? |
||
ByteCroc |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die muss Hallo$() heißen ohne Projekt2_ | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Drüber hinaus kanns sein das Borland nicht C Deklaration verwendet in den DLL (wie der GCC) sondern noch Name Mangling betreibt wie Visual Studio. In dem Falle musst du mit einem PE Explorer oder anderen Programmen reingucken wie die Funktion wirklich heisst und die DECL entsprechend anpassen. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Drüber hinaus kanns sein das Borland nicht C Deklaration verwendet in den DLL (wie der GCC) sondern noch Name Mangling betreibt wie Visual Studio. In dem Falle musst du mit einem PE Explorer oder anderen Programmen reingucken wie die Funktion wirklich heisst und die DECL entsprechend anpassen.
Löst das Problem mit Namemangling: Code: [AUSKLAPPEN] extern "C" BBDECL char* BBCALL Hallo (void); Im Übrigen muss es heißen: Code: [AUSKLAPPEN] extern "C" BBDECL const char* BBCALL Hallo( void ); |
||
http://bl4ckd0g.funpic.de |
ByteCroc |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BBDECL ist ja ein Makro und hat extern "C" schon drin.
Und ein Const char* zurückgeben, geht das überhaupt, Const = Konstante, ich weiß es nicht darum frag ich. |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja das geht und in dem Fall muss das sogar so sein!
@Topic: Hab mal was dazu geschrieben: https://www.blitzforum.de/foru...505#259505 |
||
http://bl4ckd0g.funpic.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group