Возврат строки из библиотеки C# DLL с помощью неуправляемого экспорта в сценарий установки InnoC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Возврат строки из библиотеки C# DLL с помощью неуправляемого экспорта в сценарий установки Inno

Сообщение Anonymous »

У меня есть DLL C#, которая предоставляет функцию с использованием неуправляемого экспорта, которая вызывается непосредственно сценарием Inno Setup Pascal. Эта функция должна вернуть строку в Inno Setup. Мой вопрос: как я могу это сделать?

Мой предпочтительный метод — передать буфер из Inno Setup в функцию C#, которая вернет строку внутри этого буфера. Я придумал этот код:
Функция C#:

Код: Выделить всё

[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
static int Test([Out, MarshalAs(UnmanagedType.LPWStr)] out string strout)
{
strout = "teststr";
return strout.Length;
}
Сценарий установки Inno:

Код: Выделить всё

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;

Когда я запускаю этот код, переменная Res пуста (я вижу «» в журнале)
Как я могу вернуть строку из этой DLL?
Обратите внимание, что я использую версию Inno Setup для Юникода. Я также не хочу использовать COM для вызова этой функции или для выделения буфера в DLL и возврата его в Inno Setup.

Подробнее здесь: https://stackoverflow.com/questions/207 ... etup-scrip
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»