DLL's für alle
-
Gibt es eine möglichkeit eine DLL zu erstellen, welche man in Visual C++ und im C++ Builder verwenden kann?
Wenn ich diese DLL mit VC++ erstelle benötige ich __declspec(). Dieser Befehl ist aber nur in VC++ enthalten. Wenn ich dann mit C++ Builder den Header einbinden wurde, in dem das steht kann er nichts damit amfangen und gibt eine Fehlermeldung aus.
Anmerkung: Noch lieber wäre mir natütlich, wenn ich das ganze komplett dynamisch machen könnte (dann wäre das Problem schon mal erledigt). Allerdings verwende ich Klassen und ich habe mir sagen lassen, das es nicht möglich ist, dynamisch auf Klassen in einer DLL zuzugreifen.
-
ich würde mal sagen, dass das keinerlei Auswirkungen hat.
eine DLL ist eine standarddatei. sowie sie erstellt ist, sollte sie von jedem Compiler und jeder sprache, die unter windows läuft, aufrufbar sein.
-
Ja, das stimmt, aber:
bisher benötigte ich immer den Header der DLL (in dem die Klassen und Defs. stehen) und musste die Lib linken. Das ganze ist dann aber (im eigentlichen Sinne) kein dynamischer Zugriff mehr, sndern eher statisch. Und den Header, welchen ich dann einbinde, enthält den Befehl __declspec(). Und das ist das Problem.
Aber:
Wenn ich ich wüsste, wie ich auf Klassen in einer DLL zugreifen kann, ohne den Header einbinden zu müssen, oder die Lib zu linken, damit wäre mir sicher geholfen.
-
Ja, das stimmt, aber:
Nein, stimmt nicht.
bisher benötigte ich immer den Header der DLL (in dem die Klassen und Defs. stehen) und musste die Lib linken. Das ganze ist dann aber (im eigentlichen Sinne) kein dynamischer Zugriff mehr, sndern eher statisch. Und den Header, welchen ich dann einbinde, enthält den Befehl __declspec(). Und das ist das Problem.
Tja, da bleibt dann nur der Weg über LoadLibrary/GetProcAddress. Die Konstruktoren/Destruktoren darfst du dann aber selbst aufrufen. Exceptions dürfen aber auf gar keinen Fall die Dll verlassen! Ich halte sowas aber für extrem unglücklich. Für den Export ganzer Klassen eignet sich COM wesentlich besser. Das ist dann auch wirklich unabhängig vom verwendeten Werkzeug.
Wenn ich ich wüsste, wie ich auf Klassen in einer DLL zugreifen kann, ohne den Header einbinden zu müssen, oder die Lib zu linken, damit wäre mir sicher geholfen.
Auch hier ist COM eine mögliche Lösung, speziell Automatisierung.
-
Wie realisiere ich COM in einer DLL? Und vor allem, wie wende ich es dann in meinem Programm an? Ich weiß, das ich für ein Interface die Struktur "IUnknown" benötige, und diese dann an die jeweilige Klasse vererbt wird, aber ... na ja. Ich habe bisher noch nichts mit COM's gemacht.
[ Dieser Beitrag wurde am 31.03.2003 um 14:21 Uhr von Sven2 editiert. ]
-
Schau mal ins MFC-Forum. Dort habe ich vor kurzen einen Link gepostet. Selbe Frage nach Klassenexport aus DLL und Dyn laden
-
Original erstellt von Sven2:
Wenn ich diese DLL mit VC++ erstelle benötige ich __declspec(). Dieser Befehl ist aber nur in VC++ enthalten. Wenn ich dann mit C++ Builder den Header einbinden wurde, in dem das steht kann er nichts damit amfangen und gibt eine Fehlermeldung aus.Öhm... klar gibt's das im Builder! Warte... *In meinen Codes rumwühl* ... hier hab ich's. Eine Zeile aus einem meiner DLL-Codes:
extern "C" __declspec(dllexport) __stdcall void SetHook(HWND);
[EDIT]
Das Problem mit BCB- und VC++-LIBs ist eher das Format. Eine im VC++ erstellte DLL kannst du AFAIK im Builder nicht benutzen, da das Format COFF ist, und der BCB das nicht kennt.
[/EDIT][ Dieser Beitrag wurde am 01.04.2003 um 03:34 Uhr von WebFritzi editiert. ]