Вызов .NET DLL в Inno Setup - PullRequest
       23

Вызов .NET DLL в Inno Setup

3 голосов
/ 13 декабря 2011

Я пытаюсь загрузить DLL, написанную на C #, в Inno Setup.

Вот код:

function Check(version, dir: String): Integer;
external 'Check@{src}\check.dll stdcall';

Тогда я называю это как Check(x,y)

Но DLL не может быть загружена.

Iпробовал с stdcall и cdecl.

Файл check.dll находится рядом с setup.exe.

Почему он не работает?

Ответы [ 3 ]

4 голосов
/ 10 марта 2017

Используйте Неуправляемый экспорт для экспорта функции из сборки C #, чтобы ее можно было вызывать в Inno Setup.

  • Реализация статического метода в C #
  • Добавьте пакет Unmanaged Exports NuGet в свой проект
  • Установите Цель платформы вашего проекта на x86
  • Добавьте атрибут DllExport к своему методу
  • Если необходимо, определите маршалинг для аргументов функции (в частности, маршалинг строковых аргументов должен быть определен).
  • Сложение
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;

namespace MyNetDll
{
    public class MyFunctions
    {
        [DllExport(CallingConvention = CallingConvention.StdCall)]
        public static bool RegexMatch(
            [MarshalAs(UnmanagedType.LPWStr)]string pattern,
            [MarshalAs(UnmanagedType.LPWStr)]string input)
        {
            return Regex.Match(input, pattern).Success;
        }
    }
}

На стороне Inno Setup (версия Unicode):

[Files]
Source: "MyNetDll.dll"; Flags: dontcopy

[Code]
function RegexMatch(Pattern: string; Input: string): Boolean;
    external 'RegexMatch@files:MyNetDll.dll stdcall';

И теперь вы можете использовать свою функцию:

if RegexMatch('[0-9]+', '123456789') then
begin
  Log('Matched');
end
  else
begin
  Log('Not matched');
end;

Смотри также:

3 голосов
/ 16 декабря 2011

Взгляните на Неуправляемый экспорт от Роберта Гизеке.

2 голосов
/ 13 декабря 2011

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

Проблема та же самая, например, при попытке использовать управляемые библиотеки DLL из C ++. Это не может быть сделано, за исключением случаев использования COM, как описано здесь .

Вы должны использовать собственную Win32 DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...