MS VC dll für Borland Builder Programm
-
BFMMR schrieb:
Hallo,
MFC ist es nicht.
Funktionen werden wie folgt deklariet:virtual int __declspec(dllexport) Init()=0;
Viele Grüße
öhem, man kann nur Funktionen und statische Methoden exportieren, was soll das virtual da?
Gibt es eine DEF-Datei? Falls nein solltest du eine anlegen, oder extern "C" vorne ranschreiben, um die Funktionsnamen richtig zu exportieren.edit: du kannst natürlich Klassen exportieren, die wirst du aber nicht in Borland benutzen können.
-
Das ist doch keine Funktion... das ist eine Methode einer Klasse! oder warum steht das ein "virtual"?
AFAIK kannst Du nur normale Funktionen exportieren...Mach am besten:
extern "C" void __declspec(dllexport) __stdcall Funktion()
-
Jochen Kalmbach schrieb:
Das ist doch keine Funktion... das ist eine Methode einer Klasse! oder warum steht das ein "virtual"?
AFAIK kannst Du nur normale Funktionen exportieren...Mach am besten:
extern "C" void __declspec(dllexport) __stdcall Funktion()
Wenn er __stdcall macht kann das __declspec(dllexport) weg und das extern "C" auch. Das wirkt leider irgendwie nur bei cdecl. Bei stdcall muss ne def-Datei gemacht werden.
-
Also bei mir geht das ohne Probleme...
Depends.exe zeigt die Funktion so an:_Funktion@0
Alles was mit "extern "C"" deklatiert wurde hat immer dieses mangeling... (Zuerst ein Unterstricht, dann der Funktionsname, dann ein @ und dann die Anzahl der Parameter in bytes)
No need for def-file!
-
Jochen Kalmbach schrieb:
Also bei mir geht das ohne Probleme...
Depends.exe zeigt die Funktion so an:_Funktion@0
Alles was mit "extern "C"" deklatiert wurde hat immer dieses mangeling... (Zuerst ein Unterstricht, dann der Funktionsname, dann ein @ und dann die Anzahl der Parameter in bytes)
No need for def-file!
Hab ne DLL mit Visual Toolkit 2003 gemacht, __stdcall als Konvention. Der hat mir NIE den normalen Funktionsnamen exportiert. Kann sein das der dann diesen Rotz mit _ und so rangefügt hat, das habe ich nicht geprüft. Ich musste erst ne def-Datei machen und dort die Funktionsnamen reinhauen dann gings.
edit: dasselbe auch, als ich es mit der Express-Edition gemacht habe
-
Einen Export mit nur dem Funktionsnamen geht AFAIK nicht per Source! dazu brauchst Du dann eine DEF-Datei. Wenn Du aber mit dem "extern"C"" Namen zufrieden bist brauchst Du keine DEF-Datei...
-
Hmm, das Exportieren von Klassen ist also generell nicht möglich? Bei MS VC nach MSVC klappt es ganz gut deshlab dachte ich zu anderen Systemen ist es auch möglich.
Wie kann ich denn dann etwas mit MS VC erstelltes unter Borland C++ einbinden? Das ganze ist so groß, das ein neu übersetzen unter Borland eher nicht in Frage kommt. Die Kommuniktaion zwischen den Routinen läßt sich aber über wenige elemntare Datentypen realisieren. Muß doch irgendwie relativ einfach gehen?
Viele Grüße
-
Das einfachste wird wohl COM sein...
oder Du implementierst für jede Methode eine Funktion, die noch den Instanz-Zeiger mitgibt... also z.B.class MyClass { public: MyClass(); Func1(LPCTSTR szString); };
=>
LPVOID MyClass_CreateInstance(); BOOL MyClass_Func1(LPVOID pInstance, LPCTSTR szString);
-
Jochen Kalmbach schrieb:
Einen Export mit nur dem Funktionsnamen geht AFAIK nicht per Source! dazu brauchst Du dann eine DEF-Datei. Wenn Du aber mit dem "extern"C"" Namen zufrieden bist brauchst Du keine DEF-Datei...
Bei __cdecl liefert dir extern "C" ja den Funktionsnamen als Exportnamen, leider halt bei __stdcall nicht.
BFMMR schrieb:
Hmm, das Exportieren von Klassen ist also generell nicht möglich? Bei MS VC nach MSVC klappt es ganz gut deshlab dachte ich zu anderen Systemen ist es auch möglich.
Der C++ Standard schreibt nicht vor, wie die Klassen implementiert sein müssen. Es wird ein Verhalten und evtl auch Laufzeitberhalten vorgeschrieben. Heißt der Compiler von Borland wird die Klassen anders handhaben als der MS Compiler oder als MinGW usw. Daher kannst du Klassen nicht einfach exportieren.
Du musst dir jetzt halt eine Schnittstelle suchen und diese über Exportfunktionen realisieren.
-
Pellaeon schrieb:
Bei __cdecl liefert dir extern "C" ja den Funktionsnamen als Exportnamen, leider halt bei __stdcall nicht.
Stimmt... hast natürlich recht