Как я могу назвать DLL.NET из сценария Установки Inno?

Первый случай правильный, и в наши дни swagger-ui генерирует выбор значений перечислимого числа с множественным выбором.

9
задан MaLKaV_eS 8 March 2013 в 11:36
поделиться

7 ответов

Ой, мое плохое, это было слишком длинно, так как я считал Паскаля! Так, если необходимо получить значение затем существует несколько возможностей:

  1. Запишите функциональность в C/C++ и экспортируйте функцию, это определенно поддерживается.
  2. Используйте Управляемый С++ dll, чтобы шиммировать к Вашей.NET dll и выставить вызов как точку интерфейса C (это должно работать, но это становится грязным),
  3. Используйте .exe, чтобы сохранить результат Вашего кода в.INI файле или реестра или во временном файле и считать результат в секции кода установки (это теперь правильно противно),

Когда я в последний раз работал с InnoSetup, он не поддерживал Ваш сценарий непосредственно (называющий код.NET от установки).

4
ответ дан 4 December 2019 в 15:30
поделиться

Я читал немного больше об этом - теперь я вижу различие между импортом функции C-стиля и созданием Объекта OLE.

Что-то вроде этого работало бы на меня:

[Code]
procedure MyFunction();
var
  oleObject: Variant;
begin
  oleObject := CreateOleObject('MyDLL.MyDLL');

  MsgBox(oleObject.MyFunction, mbInformation, mb_Ok);
end;

но это требует регистрирования файла DLL.

Я предполагаю, что должен буду создать приложение командной строки для вызывания функций от DLL.

3
ответ дан 4 December 2019 в 15:30
поделиться

Вы пытаетесь импортировать функцию C-стиля из своей.NET dll - это действительно не имеет никакого отношения взаимодействующий с COM. Взаимодействующий с COM позволяет Вам активировать свои объекты.NET как COM-объекты, это не выставляет их, поскольку C/C++ экспортировал функции/типы.

Если Ваша функция не должна возвращать данные, почему бы не сделать простой .exe, который вызывает Вашу функцию и просто выполняет это от Вашей установки?

Также: Посмотрите группы новостей поддержки innosetup, где Вы могли бы получить лучшую поддержку.

2
ответ дан 4 December 2019 в 15:30
поделиться

A. СЕТЬ dll можно лучше всего назвать с любого другого языка программирования путем представления его как COM-объекта. Смотрите на этот пример: http://support.microsoft.com/kb/828736. Это показывает, как назвать ".NET dll" от "неуправляемого C++". Можно заменить "unamanged C++" любым другим языком программирования, который может использоваться в качестве COM-клиента.

0
ответ дан 4 December 2019 в 15:30
поделиться
-3
ответ дан 4 December 2019 в 15:30
поделиться

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 (удачи)

5
ответ дан 4 December 2019 в 15:30
поделиться

Попробуйте использовать 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';
0
ответ дан 4 December 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: