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.