Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rückgabe eines Null terminierten Str einer C++ Dll an Delphi (https://www.delphipraxis.net/45567-rueckgabe-eines-null-terminierten-str-einer-c-dll-delphi.html)

DerBadejunge 8. Mai 2005 16:25


Rückgabe eines Null terminierten Str einer C++ Dll an Delphi
 
Hallo!
Ich habe in C++ eine beliebige Funktion, welche mit
Delphi-Quellcode:
return const* char;
endet.
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.

SirThornberry 8. Mai 2005 16:53

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.

Christian Seehase 8. Mai 2005 17:41

Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
 
Moin Wilhelm,

den Typ würde ich Delphi als PChar definieren.

Bernhard Geyer 8. Mai 2005 18:18

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.

DerBadejunge 8. Mai 2005 19:19

Re: Rückgabe eines Null terminierten Str einer C++ Dll an De
 
So Lade ich meine Funktion aus der Dll...

Delphi-Quellcode:
function parseonly(P: PChar): PChar; stdcall; external 'libprimzahl.dll'index 4;
Und so auch die Dll.

Delphi-Quellcode:
__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;
}
"ausdruck(k)" liefert dabei einen Integer der gmp Bibliothek mit (fast) undendlicher größe...
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

Chewie 8. Mai 2005 19:57

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.

DerBadejunge 9. Mai 2005 08:17

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