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.