DLL für andere Programme zugänglich



  • Hallo zusammen,

    bin gerade im Rahmen meiner Diplomarbeit dabei eine DLL für diverse Funktionalitäten zu erstellen. Dies geschieht im C++-Builder und funktioniert auch alles recht gut.

    Hier meine Frage:
    > Diese DLL muss auch in anderen Anwendungen benutzt werden können.
    Diese sind z.B. LabView, Excel(VB), .NET
    > AUf was muss ich da konkret achten? Wie wird das z.B mit dem AnsiString
    geregelt, welchen es ja nur Borlandspezifisch gibt?

    Wäre um eine Erklärung sehr dankbar.

    Danke

    Grüße



  • Eine DLL kann von allen problemlos genutzt werden, solange sie ein reines C-Interface bietet. Das heißt, dass du z.B. auf Parameter vom Typ AnsiString verzichten solltest. Wenn du einen String entgegennehmen willst, dann mach es mit einem Zeiger auf ein char-Array. Intern kannst du ja immer noch nach AnsiString konvertieren.



  • Hi,

    ok, habe ich kapiert.

    Jetzt noch weitere Frage:
    > Wenn ich eine neue DLL anlege, dann frägt er mich ob ich die DLL im VC++ Stil erstellen möchte. Macht das Sinn? Ist das für die Kompatibilität besser oder ist das vom Prinzip her egal?
    > Von der Idee her werde ich eine zentrale CPP mit passendem Header erstellen, in welcher reine Funktionen (ohne Klassen) definiert sind, welche als Schnittstelle fungieren. Intern kann ich mich ja dann Borland-spezifisch austoben! Ist das das richtige Vorgehe??
    > Was bedeutet das Stichwort __declspec? Mach ich so die Funktionen von außen zugänglich?
    > Habt ihr vielleicht ein kleines Tutorial für eine DLL-Erstellung im Builder damit ich das konrete Vorgehen sehen kann?

    Schon mal vielen Dank

    Grüße



  • Bench_XProjects schrieb:

    > Wenn ich eine neue DLL anlege, dann frägt er mich ob ich die DLL im VC++ Stil erstellen möchte. Macht das Sinn? Ist das für die Kompatibilität besser oder ist das vom Prinzip her egal?

    Ich nutze den Builder nicht und weiß jetzt auch nicht, was genau das bedeuten soll (hilft da die Doku nicht weiter?).

    Bench_XProjects schrieb:

    > Von der Idee her werde ich eine zentrale CPP mit passendem Header erstellen, in welcher reine Funktionen (ohne Klassen) definiert sind, welche als Schnittstelle fungieren. Intern kann ich mich ja dann Borland-spezifisch austoben! Ist das das richtige Vorgehe??

    Klar. Ich nutze innerhalb von DLLs auch Nicht-C-Funktionen und Klassen, exportiere aber nur Funktionen im C-Stil. Die werden z.B. auch in LabView genutzt. Ist gar kein Problem.

    Bench_XProjects schrieb:

    > Was bedeutet das Stichwort __declspec? Mach ich so die Funktionen von außen zugänglich?

    Genauer: mit "__declspec(dllexport)" (wenn das im Builder auch genauso ist wie bei MS, da bin ich nicht ganz sicher). Du kannst mit dem "Dependency Walker" sehr schön sehen, wie die Funktion nach außen hin mit oder ohne 'Deckelspeck' aussieht.

    Hier noch was zu lesen zum Thema:
    http://msdn.microsoft.com/en-us/library/dabb5z75(VS.80).aspx
    http://msdn.microsoft.com/de-de/library/a90k134d(VS.80).aspx
    (ich hoffe, die MS-Doku lässt sich hier ohne Probleme anwenden, ansonsten musst du halt eine VCL-spezifische Doku suchen).



  • Hi,

    super danke!

    Hilft mir weiter!

    werde mich im Verlaufe meines Projektes wieder melden 😉 !

    Grüße



  • Bench_XProjects schrieb:

    > Wenn ich eine neue DLL anlege, dann frägt er mich ob ich die DLL im VC++ Stil erstellen möchte. Macht das Sinn? Ist das für die Kompatibilität besser oder ist das vom Prinzip her egal?

    Steht in der Dokumentation:

    C++Builder-Dokumentation schrieb:

    DLL im VC++-Stil

    Legt den Einsprungspunkt der DLL fest. Falls der DLL-Einsprungspunkt DLLMain gemäß Microsoft Visual C++-Stil lauten soll, aktivieren Sie diese Option. Andernfalls wird DLLEntryPoint als Einsprungspunkt verwendet.


Anmelden zum Antworten