AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Rückgabe eines Null terminierten Str einer C++ Dll an Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabe eines Null terminierten Str einer C++ Dll an Delphi

Ein Thema von DerBadejunge · begonnen am 8. Mai 2005 · letzter Beitrag vom 9. Mai 2005
Antwort Antwort
DerBadejunge

Registriert seit: 7. Apr 2005
8 Beiträge
 
#1

Rückgabe eines Null terminierten Str einer C++ Dll an Delphi

  Alt 8. Mai 2005, 16:25
Hallo!
Ich habe in C++ eine beliebige Funktion, welche mit
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 8. Mai 2005, 16:53
wie hast du diese funktion in Delphi importiert, hast du eventuell "stdcall" vergessen? Etwas source wäre hilfreich.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 8. Mai 2005, 17:41
Moin Wilhelm,

den Typ würde ich Delphi als PChar definieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 8. Mai 2005, 18:18
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DerBadejunge

Registriert seit: 7. Apr 2005
8 Beiträge
 
#5

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

  Alt 8. Mai 2005, 19:19
So Lade ich meine Funktion aus der Dll...

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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 8. Mai 2005, 19:57
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
DerBadejunge

Registriert seit: 7. Apr 2005
8 Beiträge
 
#7

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

  Alt 9. Mai 2005, 08:17
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz