It is easier to retireve a string using PString:
function DelphiFunction(inputString : PAnsiChar;
function DelphiFunction(inputString : PAnsiChar;
var outputStringBuffer : PString;
var errorMsgBuffer : PString)
: WordBool; stdcall; export;
var s : string;
begin
try
var
s : string;
begin
try
s := inputString;
outputStringBuffer:=PString(AnsiString(s));
Result := true;
except
except
on e : exception do
begin
s:= 'error';
errorMsgBuffer:=PString(AnsiString(e.Message));
Result := false;
end;
end;
end;
In c# then:
const int stringBufferSize = 1024;
var str = new IntPtr(stringBufferSize);
string loginResult = Marshal.PtrToStringAnsi(str);