Delphi-Quellcode:
function DeinDLLCode: PChar;
begin
result := '42';
end;
Code:
[DllImport("Deine.dll", CharSet = CharSet.Ansi)]
static extern string DeinDLLCode();
Das ist die simple Variante, aber nicht schön - lieber anders:
Delphi-Quellcode:
function DeinDLLCode(str: PChar): Integer;
begin
if assigned(str) then
begin
// str auf '42' setzen, wie ging das?
result := 0;
end
else
result := 3; // '42'#0
end;
end;
Code:
[DllImport("Deine.dll", EntryPoint = "DeinDLLCode", CharSet = CharSet.Ansi)]
static extern int DeinDLLCodeInternal([Out] StringBuilder str);
static string DeinDLLCode()
{
int len = DeinDLLCodeInternal(null);
StringBuilder str = new StringBuilder(len);
DeinDLLCodeInternal(str);
return str.ToString();
}
Da fehlen natürlich noch alle Fehlerauffangmechanismen, und für Richtigkeit garantieren kann ich auch nicht (so oft hantiere ich nicht mit P/Invokes), aber das Prinzip müsste rübergekommen sein