Первый случай правильный, и в наши дни swagger-ui генерирует выбор значений перечислимого числа с множественным выбором.
Ой, мое плохое, это было слишком длинно, так как я считал Паскаля! Так, если необходимо получить значение затем существует несколько возможностей:
Когда я в последний раз работал с InnoSetup, он не поддерживал Ваш сценарий непосредственно (называющий код.NET от установки).
Я читал немного больше об этом - теперь я вижу различие между импортом функции C-стиля и созданием Объекта OLE.
Что-то вроде этого работало бы на меня:
[Code]
procedure MyFunction();
var
oleObject: Variant;
begin
oleObject := CreateOleObject('MyDLL.MyDLL');
MsgBox(oleObject.MyFunction, mbInformation, mb_Ok);
end;
но это требует регистрирования файла DLL.
Я предполагаю, что должен буду создать приложение командной строки для вызывания функций от DLL.
Вы пытаетесь импортировать функцию C-стиля из своей.NET dll - это действительно не имеет никакого отношения взаимодействующий с COM. Взаимодействующий с COM позволяет Вам активировать свои объекты.NET как COM-объекты, это не выставляет их, поскольку C/C++ экспортировал функции/типы.
Если Ваша функция не должна возвращать данные, почему бы не сделать простой .exe, который вызывает Вашу функцию и просто выполняет это от Вашей установки?
Также: Посмотрите группы новостей поддержки innosetup, где Вы могли бы получить лучшую поддержку.
A. СЕТЬ dll можно лучше всего назвать с любого другого языка программирования путем представления его как COM-объекта. Смотрите на этот пример: http://support.microsoft.com/kb/828736. Это показывает, как назвать ".NET dll" от "неуправляемого C++". Можно заменить "unamanged C++" любым другим языком программирования, который может использоваться в качестве COM-клиента.
Сценарий Innosetup для обнаружения dotnet платформы и старой версии мог бы быть несколько полезным.
Intenta de esta manera (Попробуйте так):
Var
obj: Variant
va: MyVariableType;
Begin
//Starting
ExtractTemporaryFile('MyDll.dll');
RegisterServer(False, ExpandConstant('{tmp}\MyDll.dll'), False);
obj := CreateOleObject('MyDll.MyClass');
//Using
va := obj.MyFunction();
//Finishing
UnregisterServer(False, ExpandConstant('{tmp}\MyDll.dll'), False);
DeleteFile('{tmp}\MyDll.dll');
End;
Suerte (удачи)
Попробуйте использовать delayload, он используется для библиотеки DLL, которая может не существовать во время выполнения. Это решит проблему.
Например:
[Files]
Source: odbccp32.dll; Flags: dontcopy
[Code]
procedure SQLConfigDataSource(hwndParent: Integer; Frequest: Integer; LpszDriver: String; lpszAttributes: String);
external 'SQLConfigDataSource@files:odbccp32.dll stdcall delayload';