在Inno Setup中调用.NET DLL

时间:2011-12-13 10:53:20

标签: .net dll inno-setup

我试图将用C#编写的DLL加载到Inno Setup中。

以下是代码:

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

然后我称之为Check(x,y)

但是DLL无法加载。

我尝试使用stdcallcdecl

check.dll文件位于setup.exe

为什么它不起作用?

3 个答案:

答案 0 :(得分:3)

看看Robert Giesecke的Unmanaged Exports

答案 1 :(得分:3)

使用Unmanaged Exports导出C#程序集中的函数,以便可以在Inno Setup中调用它。

  • 在C#中实现静态方法
  • Unmanaged Exports NuGet包添加到您的项目
  • 将项目的平台目标设置为 x86
  • <div class="item"><a href="https://www.youtube.com/watch?v=6ztm7YkLElI">Devinsupertramp</a></div> 属性添加到您的方法
  • 如果需要,为函数参数定义编组(特别是必须定义字符串参数的编组)。
  • 构建
DllExport

在Inno设置端(Unicode版本):

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;
        }
    }
}

现在你可以使用你的功能了:

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

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

另见:

答案 2 :(得分:2)

我不认为这是可能的。托管DLL不直接导出函数。从InnoSetup调用DLL需要直接导出函数。

例如,当尝试使用来自C ++的托管DLL时,问题是相同的。除非使用COM,否则无法执行此操作,如here所述。

您应该使用本机Win32 DLL。

相关问题