AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi PChar to String & zurück - Zeichen geht verloren
Thema durchsuchen
Ansicht
Themen-Optionen

PChar to String & zurück - Zeichen geht verloren

Offene Frage von "ThE_-_BliZZarD"
Ein Thema von ThE_-_BliZZarD · begonnen am 14. Okt 2007 · letzter Beitrag vom 16. Okt 2007
Antwort Antwort
Seite 3 von 3     123   
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#21

Re: PChar to String & zurück - Zeichen geht verloren

  Alt 15. Okt 2007, 15:24
@ThE_-_BliZZarD:
Ich hoffe du beachtest die Einwände von Thomas und mir. Du hast vielleicht dein Problem kurzzeitig für deinen Beispielparameter gelöst. Die Lösung mit dem #0 ist einfach nur gefrickel und absolut unsicher. Wunder dich nicht wenn dein programm irgendwann mal einfach crashed.

Benutze einen String als Rückgabewert. Das geht auch in dlls, dafür musst du dann aber als erste unit sharemem benutzen. Ansonsten kann das selbe Verhalten auftreten (manchmal gehts und manchmal nicht).

Oder du benutzt den WinAPI Ansatz wenn du unbedingt einen PChar benutzen willst. Alles andere ist programmiertechnisch unsauber und nicht zu empfehlen. Auch wenn es nun den Anschein hat es funktioniert.

Ich hoffe für alle die mal das selbe Problem haben, dass sie diesen Thread bis zum Ende lesen.
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#22

Re: PChar to String & zurück - Zeichen geht verloren

  Alt 16. Okt 2007, 19:45
Ich muss mich dem anschließen, es funktioniert nicht mehr. Also bis zurück in das Mutterprog hats mein Wert geschafft, aber dann ist Ende..^^

Ich hatte irgendwo schon ein Sourcebeispiel für eine Implementation ala GetModuleFileName() gesehn, leider finde ich sie nicht mehr
Hoffe ihr könnt mir nochmal verzeihen und ein gaaanz kurzes Stück Beispielcode machen :-/ Denn, ich habe leider bisher noch nie selber Speicher angefordert/beschrieben geschweige denn wieder freigegeben..

Thx in advance,

BliZZarD
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#23

Re: PChar to String & zurück - Zeichen geht verloren

  Alt 16. Okt 2007, 19:56
Delphi-Quellcode:
function PCharDLLFunktion(str: PChar): Integer;
var s: String;
begin
  s := StringDLLFunktion;
  if str = nil then
    Result := Length(s)
  else
  begin
    try
      Move(s[1], str^, Length(s));
      Result := -1; //Success
    except
      Result := -2; //Failure
    end;
  end;
end;


function NichtDLLFunktion: String;
begin
  SetLength(Result, PCharDLLFunktion(nil));
  if PCharDLLFunktion(@Result[1]) <> -1 then
    MessageBox('Fehler');
end;

// Oder so ähnlich
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#24

Re: PChar to String & zurück - Zeichen geht verloren

  Alt 16. Okt 2007, 20:11
hmm.. warum wurde dort jetzt nichts mit Speicher allozieren/freigeben usw gemacht?
Oder reicht das für meine Zwecke schon.

(man ist mir die Frage peinlich...)



Allllllerdings, ich glaube das Problem behebt sich selbsttätig.

Ich muss einer anderen Funktion in der DLL einen Record übergeben, der jede Menge kram enthält, und der soll in der DLL-Funktion geändert/erweitern werden und dann wieder zum Mutterprogramm zurückgegeben werden.. Dafür brauch ich ShareMem, oder?

Und wenn ja.. dann kann ich ja auch gleich Strings verwenden, ne?

Muss ich irgendwas beachten wenn ich ShareMem einsetze?
Dazu 2 Fragen:
1. Wie kann ich sicherstellen, das die für ShareMem benötigten Bibliotheken (welche DLL's sind das?) auch beim Anwender vorhanden sind? Beim Start des Programms aus einer Resource extrahieren hilft ja nicht, da die DLL's ja schon beim Start geladen werden..
2. Wie muss ich den Record übergeben, damit er im Unterprogramm geändert werden kann und diese Werte auch erhalten bleiben? Normal mit
function DLLs_nerven_irgendwie(var MyKnoten: TKnotenFeld): Integer; ?? Oder gibts da irgendwas special-artiges?^^

Danke leute,

BliZZarD
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#25

Re: PChar to String & zurück - Zeichen geht verloren

  Alt 16. Okt 2007, 20:17
ShareMem muss als erste Unit in der dpr-Datei stehen, und wenn du die Anwendung weitergibst, musst du die Borlandmm.dll mitgeben.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#26

Re: PChar to String & zurück - Zeichen geht verloren

  Alt 16. Okt 2007, 20:19
1: Ja über SetLength wird Speicher reserviert, damit funktioniert obiges Beispiel

2: Das hängt ganz von deinem Record ab, denn es keiner Größenveränderung bedarf, dann funktioniert dein Beispiel bereits (mit Var übergibst du im Prinzip einen Pointer auf dein Record).
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 05:11 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