![]() |
std::basic_string class -> pascal
ich möchte diese funktion gern von meiner delphi dll aus aufrufen um im visual c++ 6.0 geschriebenen hauptprogramm eine meldung auszugeben.
Code:
es handelt sich eigentlich um einen string der hier übergeben wird. allerdings habe ich probleme den aufruf der prozedur nach pascal zu übersetzen, da es sich wohl um etwas kompilerspezifisches handelt. im internet konnte ich sonst leider nur sehr wenig dazu finden. vielleicht könnte mir ja jemand weiterhelfen der sich gut mit c++ auskennt.
void TextDisplayAdd(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)
gruß Norman |
Re: std::basic_string class -> pascal
Willkommen bei der DP, aber ich glaube da hast du keine Chance. Wenn ich das recht sehe wird eine C++ Klasse uebergeben und die calling convention der Funktion ist wahrscheinlich __fastcall. Wie kriegst du eigentlich die Adresse der Funktion in die DLL?
|
Re: std::basic_string class -> pascal
danke. ja, stimmt, den pointer übergebe ich auch mit assembler ;)
da wird es doch einen weg geben, oder? gruß Norman |
Re: std::basic_string class -> pascal
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:
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.
// Aufruf:
portableTextDisplayAdd (PChar ('ein String')); |
Re: std::basic_string class -> pascal
ja, eine wrapper dll habe ich mir auch schon überlegt, ich dachte nur ich finde hier im forum eine bessere möglichkeit dafür. es müsste ja auch reichen, wenn ich mir von der wrapper dll die klasse erstellen lasse und dann einfach via pointer die klasse an die applikation weitergebe, oder? ich möchte es soweit wie möglich modular halten, da mir sicher nochmal so eine klasse über den weg läuft.
|
Re: std::basic_string class -> pascal
Wenn du modular beliebn willst, dann verwende nichts Compiler-spezifisches im Interface. Das heißt nur c-kompatibles, weder delphi noch c++-Erweiterungen des Visual-C-Compilers.
|
Re: std::basic_string class -> pascal
für das was in der applikation verwendet wurde bin, ich leider nicht verantwortlich ;) das ist da problem
gruß Norman |
Re: std::basic_string class -> pascal
noch eine frage. hat jemand lust mir eine dll zu schreiben die eine funktion enthält, um einen einzigen globalen string mit einem pchar beschreiben und den pointer zu diesem string zurückgibt? leider habe ich weder ahnung noch zugang zu einem geeigneten c++ compiler.
gruß Norman |
Re: std::basic_string class -> pascal
Hallo,
1. turbo c++ (5.5 ?) gibt es kostenlos bei Borland (ähem codegear). 2. Lust habe ich aber keine Zeit. Heiko |
Re: std::basic_string class -> pascal
Welche Delphi-Version hast du?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz