AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi PChars mit Null Bytes von DLL zu Programm übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

PChars mit Null Bytes von DLL zu Programm übergeben

Ein Thema von edosoft · begonnen am 27. Mär 2008 · letzter Beitrag vom 27. Mär 2008
 
Benutzerbild von edosoft
edosoft

Registriert seit: 27. Okt 2003
Ort: Wehingen
258 Beiträge
 
Turbo Delphi für Win32
 
#1

PChars mit Null Bytes von DLL zu Programm übergeben

  Alt 27. Mär 2008, 09:06
Hallo,

Ich versuche grade meine erste DLL-Datei zu schreiben =) klappt auch relativ gut... nur mit dem string hin-und hertauschen habe ich probleme. um von einer funktion eine rückgabe zu erhalten habe ich die als PChar definiert. jetzt kann es aber sein, da ich mit dateiinhalten und dateihashes arbeite dass irgendwo mitten in einem string ein nullbyte enthalten ist. wenn ich den jetzt mit PChar(s) in einen pchar umwandle um ihn als rückgabewert der funktion anzugeben wird der string ja abgeschnitten. deswegen hab ich mir gedacht ich geb einfach zusätzlich die länge des strings zurück bevor er in einen pchar umgewandelt wird und kann ja dann bestimmt irgendwie den speicherbereich der eigentlich für den pchar reserviert wurde im hauptprogramm wieder auslesen und in einen string umwandeln.
da hab ich mal bissle rumprobiert und bin auf folgendes gestoßen:


DLL-Datei:
Delphi-Quellcode:
function GetFileHash(pFileName: PChar; out pBuff: PChar): Integer; stdcall;
var
  sHash: string;
begin
  sHash := 'a'+#0+'b';
  pBuff := PChar(sHash);
  Result := Length(sHash);
end;
Hauptprogramm:
Delphi-Quellcode:
var
  i: Integer;
  s, s2: string;
  p: pchar;
begin
  i := DllGetFileHash('c:\CA.txt', p);
  s := string(@p^);
  showmessage(inttostr(length(p))); //1
  showmessage(inttostr(length(s))); //3 (!)
  s2 := '';
  for i := 1 to Length(s) do
  begin
    s2 := s2 + IntToHex(Ord(s[i]), 2) + ' ';
  end;
  ShowMessage(s2); //61 00 62
was ich mich jetz frage ist warum funktioniert das?? und woher weis der delphi dass der speicherbereich von p 3 bytes groß sein sollte?
kann ich die funktion so verwenden oder könnte ich damit probleme bekommen? oder hat vielleicht irgendjemand eine bessere idee?

Vielen Dank!!
Dominik Weber
www.edo-soft.com
  Mit Zitat antworten Zitat
 


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 14:56 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