![]() |
Rückgabe eines Null terminierten Str einer C++ Dll an Delphi
Hallo!
Ich habe in C++ eine beliebige Funktion, welche mit
Delphi-Quellcode:
endet.
return const* char;
Logisch, die Dll gibt mir also einen Cstring bzw. Null-terminierten String zurück. Doch endet dies immer in diesem Komischen CPU fenster mit irgenteinem Fehler oder auch mit Memory-irgentwas... Ich habe vermutet, dass es daran liegt, dass der c-string als zeiger verstanden sein könnte und Delphi keinen zugriff darauf hat. Doch bin ich mir nicht sicher und habe ich keine Lösung dafür... ;o( Danke für Hilfe. Wilhelm K. |
Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
wie hast du diese funktion in Delphi importiert, hast du eventuell "stdcall" vergessen? Etwas source wäre hilfreich.
|
Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
Moin Wilhelm,
den Typ würde ich Delphi als PChar definieren. |
Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
Kann es auch sein das der Speicher in der DLL wieder freigegeben wird? Sprich: Du einen ungültigen Pointer zurückbekommst?
Machs lieber so: Die Exe übergibt ein array[0...x] of char an die DLL und die DLL füllt dieses Array. Anschließend kannst Du den Inhalt des arrays in ein normalen Delphi-String kopieren. |
Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
So Lade ich meine Funktion aus der Dll...
Delphi-Quellcode:
Und so auch die Dll.
function parseonly(P: PChar): PChar; stdcall; external 'libprimzahl.dll'index 4;
Delphi-Quellcode:
"ausdruck(k)" liefert dabei einen Integer der gmp Bibliothek mit (fast) undendlicher größe...
__stdcall const char* parseonly(const char* k){
i = 0; mpz_class n = ausdruck(k); const char* ergebnis = mpz_get_str(0, 0, n.get_mpz_t()); return ergebnis; } Dieser wird mit mpz_get_str in ergebnis exportiert und returbned... Da ich bisher auch andere Funktionen in dieser Bibliothek habe, die int und Bool zurück geben kann ich getrost sagen, dass es an der rückgabe des const char* liegt... (PChar) Kann es sein, dass die Semantik von Delphi nicht zugriff auf c++ variablen hat? P.S. auch die Static deklaration hat nicht gefunzt... P.S. genauso, wie eine Delphireferenz zusammen mit c++ bei mir nicht im geringsten eine Referenz war... gruß und Danke Wilhelm |
Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
wie sieht denn mpz_get_str aus?
Wenn dort der Speicher für den String nicht im globalen Speicher alloziert wird, kann es nicht funktionieren. Ansonsten: einfach mal die Startadressen in der DLL und in der Anwendung vergleichen. |
Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
Ja, das mag eine gute idees sein.
Wie kann es denn sein, dass es unter c++ funtz? Wie kann ich ggf eine Kopie von dem Speicher machen und jene zurückgeben? Und wie mache ich es mit diesen Startadressen? Dennoch: Ich kann ja mal versuchen einen normalen const char* mit '5' zudefinieren. Weitere Hilfen zu PChar Problemen?!? Danke! gruß Wilhelm K. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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-2025 by Thomas Breitkreuz