Retornando uma seqüência de caracteres de uma DLL C # com exportações não gerenciadas para o script Inno Setup
Eu tenho uma DLL C # que expõe uma função usandoExportações não gerenciadas que é chamado diretamente por um script Inno Setup Pascal. Esta função precisa retornar uma seqüência de caracteres para Inno Setup. Minha pergunta é como posso fazer isso?
Meu método preferido é passar um buffer do Inno Setup para a função C # que retornará a string dentro desse buffer. Eu vim com este código:
Função C #:
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
static int Test([Out, MarshalAs(UnmanagedType.LPWStr)] out string strout)
{
strout = "teststr";
return strout.Length;
}
Script Inno Setup:
function Test(var res: String):Integer; external 'Test@files:testdll.dll stdcall';
procedure test1;
var
Res: String;
l: Integer;
begin
SetLength(Res,256);
l := Test(Res);
{ Uncommenting the following line causes an exception }
{ SetLength(Res,l); }
Log('"Res"');
end;
Quando executo esse código, oRes
variável está vazia (vejo "" no log)
Como posso retornar uma string dessa DLL?
Observe que estou usando a versão Unicode do Inno Setup. Também não quero usar COM para chamar essa função nem para alocar um buffer na DLL e devolvê-lo ao Inno Setup.