Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: PChars mit Null Bytes von DLL zu Programm übergeben

  Alt 27. Mär 2008, 10:41
Wie du meinst.

Wie wäre es damit:
Delphi-Quellcode:
//***DLL
type IString=Interface
       procedure SetString(Value:string);
       function GetString:string;
       property Str:string read GetString write SetString;
     end;

     TString=class(TInterfacedObject,IString)
       procedure SetString(Value:string);
       function GetString:string;
       private
         Fstring:string;
     end;

function GetFileHash(pFileName: PChar): IString; stdcall;
var
  sHash: string;
begin
  sHash := 'a'+#0+'b';
  result:=TString.create;
  result.Str:=sHash;
end;

procedure TString.SetString(Value:string);
begin
  FString:=value;
end;
function TString.GetString:string;
begin
  result:=FString;
end;

exports GetFileHash;
Delphi-Quellcode:
//****Main
type IString=Interface
       procedure SetString(Value:string);
       function GetString:string;
       property Str:string read GetString write SetString;
     end;


implementation

{$R *.dfm}

function GetFileHash(pFileName:Pchar):IString; stdcall; external 'PDLL.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  s: IString;
  len:Integer;
begin
  s := GetFileHash('c:\CA.txt');
  len:=length(s.Str);
  ShowMessage(inttostr(len)+': '+s.Str);
end;
Edit: Dürfte auch zu Problemen führen wenn das Interface eher gelöscht wird, als eine Kopie von IString.Str.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat