AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi DLL in C++ Builder

Ein Thema von Tim Henford · begonnen am 1. Okt 2007 · letzter Beitrag vom 8. Okt 2007
Antwort Antwort
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#1

Delphi DLL in C++ Builder

  Alt 1. Okt 2007, 13:56
Hallo,

ich wollte meine Delphi DLL in ein C++ Builder einbinden. Wie rufe ich meine DLL Funktion dann statisch auf?

Es hiess auf ein anderen Seite:
@In diesem Falle sollte Dir die .lib und .h Datei zu Deiner Dll zur Verfügung stehen. Ist aber kein Problem da Du ja die Dll selber geschrieben hast.
Füge die .lib Datei Deinem C++ Projekt hinzu, kopiere die Headerdatei und die Dll in dein Projektverzeichnis."

Aber sowas gibt es doch bei Delphi nicht, oder?

Und wie ist es mit der ersten Sharemem Unit, wie geht das mit C++ Builder?


Delphi-Quellcode:

function Summe(a, b: integer): integer;
begin
  result:= a+b;
end;

exports Summe;

begin
end.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#2

Re: Delphi DLL in C++ Builder

  Alt 2. Okt 2007, 14:49
Zitat von Tim Henford:
Aber sowas gibt es doch bei Delphi nicht, oder?
Doch: du kannst Delphi veranlassen, Header- und .lib-Dateien für C++Builder zu generieren (Linker Options, "Generate C++ object files", "Export all symbols" und "Include namespaces").


Zitat von Tim Henford:
Und wie ist es mit der ersten Sharemem Unit, wie geht das mit C++ Builder?
Dazu äußert sich C++Builder, wenn du ein leeres DLL-Projekt erstellst:
Code:
//---------------------------------------------------------------------------
//   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.
//---------------------------------------------------------------------------
Moritz
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#3

Re: Delphi DLL in C++ Builder

  Alt 4. Okt 2007, 13:50
Super, danke. Nur mal so: geht das mit MS VC++ auch mit der MEMMGR.LIB?

Delphi erstellt nun die *.obj dabei scheint der Compiler aber auch immer mal einen CompilerFehler LE40 oder so zu bringen.
Mit C++ kann ich nun die obj einbinden?
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#4

Re: Delphi DLL in C++ Builder

  Alt 7. Okt 2007, 19:05
Zitat von Tim Henford:
Super, danke. Nur mal so: geht das mit MS VC++ auch mit der MEMMGR.LIB?
Nein. VC verwendet einen eigenen, inkompatiblen Speichermanager sowie ein inkompatibles LIB-Format (COFF anstatt OMF), und überdies ein anderes Objektstrukturformat, weshalb nicht-POD-Typen nicht austauschbar sind (was z.B. auch für AnsiString gilt).

Zitat von Tim Henford:
Mit C++ kann ich nun die obj einbinden?
Ja; die Objektdatei einfach dem Projekt hinzufügen (für den Linker) und die Headerdatei, wo benötigt, mittels #include einbinden.
Moritz
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Delphi DLL in C++ Builder

  Alt 7. Okt 2007, 19:16
Du solltest die Aufrufkonvention von Summe ändern. In Delphi ist Register der Standard, Register gibt es in C++ aber nicht. Nimm entweder Stdcall oder cdecl.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#6

Re: Delphi DLL in C++ Builder

  Alt 8. Okt 2007, 16:37
Der generierte Header ist speziell für C++Builder, und dort erhält die Funktion dann automatisch die äquivalente __fastcall-Aufrufkonvention. Soll die Funktion aber von VC oder einem anderen Compiler aus benutzt werden können (wobei sich die genannten Einschränkungen ergeben), solltest du die Aufrufkonvention tatsächlich in Delphi anpassen.
Moritz
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz