Einzelnen Beitrag anzeigen

DMW

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

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 17:22
Hallo,

wie Robert Marquardt schon feststellte, kannst du die Funktion aus Delphi nicht aufrufen, da du eine C++-Klasse übergeben müßtest, die sich vom Aufbau völlig von Delphi-Klassen unterscheidet. Zwar könnte man mit C++Builder auch aus Delphi verwendbare Klassen erstellen, doch macht das hier wenig Sinn, zumal da std::string nicht trivial ist und einige mit Delphi-Klassen nicht ohne weiteres mögliche Funktionalität implementiert - überdies ist es natürlich auch noch compilerabhängig.
Neben COM ist die einzige Möglichkeit, um zwischen mit verschiedenen Programmiersprachen/Compilern erstellten Programmteilen interagieren zu können, ein C-Interface. D.h., du müßtest eine Wrapperfunktion in C++ implementieren, die z.B. einen const char* anstatt eines const std::string& übernimmt. Auch muß die Wrapperfunktion als extern "C" deklariert sein, nicht aufgrund der Aufrufkonvention (die ist übrigens in C und C++ normalerweise __cdecl, __fastcall ist bei Delphi üblich), sondern damit der Name nicht dekoriert wird, was bei C++ zur Unterstützung der Funktionsüberladung üblich ist.

Beispiel:
Code:
// Wrapper:
extern "C" void portableTextDisplayAdd (const char* ptr)
{
    TextDisplayAdd (ptr);
}
Delphi-Quellcode:
// Aufruf:
portableTextDisplayAdd (PChar ('ein String'));
Wie du die Funktion in Delphi deklarierst, hängt davon ab, ob du sie aus einer DLL oder einem statisch hinzugelinkten Modul importierst. Da müssen dir die Delphi-Experten weiterhelfen.
Moritz
  Mit Zitat antworten Zitat