Thema: Delphi How to - string in DLL

Einzelnen Beitrag anzeigen

WojTec

Registriert seit: 17. Mai 2007
480 Beiträge
 
Delphi XE6 Professional
 
#16

Re: How to - string in DLL

  Alt 20. Jun 2011, 09:24
DLL:
Delphi-Quellcode:
library StringDLL;

uses
  SysUtils;

function Foonction(Data: PWideChar; Buffer: PWideChar; lenBuffer: Cardinal): Cardinal; stdcall;
var
  S: string;
begin
  S := 'foo' + Data;

  if Assigned(Buffer) then
    StrLCopy(Buffer, PWideChar(S), lenBuffer)
  ;

  Result := Length(S);
end;

exports
  Foonction;

begin
end.
@Luckie, Length() is function from Delphi

Here you are complete code with variants I tried to static load and call StringDLL.dll-->Foonction():

Delphi-Quellcode:
function Foonction(Data: PWideChar; Buffer: PWideChar; lenBuffer: Cardinal): Cardinal; external 'StringDLL.dll';

// 1:

var
  Buffer: string;
  BufferSize: DWORD;
begin
  BufferSize := Foonction('bar', nil, 0);
  if BufferSize > 0 then
  begin
    SetLength(Buffer, BufferSize);
    Foonction('bar', PWideChar(Buffer), BufferSize);
  end
  else
    Buffer := '';
  ShowMessage(Buffer);
end;

// 2:

var
  Buffer: PWideChar;
  BufferSize: DWORD;
begin
  BufferSize := Foonction('bar', nil, 0);
  ShowMessage(IntToStr(BufferSize));

  GetMem(Buffer, BufferSize + 1);
  try
    Foonction('bar', Buffer, BufferSize + 1);
    ShowMessage(Buffer);
  finally
    FreeMem(Buffer);
  end;
end;

// 3:

var
  Buffer: array [0..MAX_PATH - 1] of Char;
  BufferSize: DWORD;
begin
  BufferSize := High(Buffer);
  ShowMessage(IntToStr(Foonction('bar', Buffer, BufferSize)));
  Caption := Buffer;
end;
All of them working when Foonction() is in EXE, none of them working if Foonction() is in DLL - raises AV in DLL.
  Mit Zitat antworten Zitat