在Inno安装程序中调用.NET DLL
我正试图将一个用C#编写的DLL加载到Inno安装程序中 代码如下:在Inno安装程序中调用.NET DLL,.net,dll,inno-setup,.net,Dll,Inno Setup,我正试图将一个用C#编写的DLL加载到Inno安装程序中 代码如下: 函数检查(版本,目录:字符串):整数; 外部“Check@{src}\Check.dll stdcall”; 然后我把它叫做Check(x,y) 但无法加载DLL 我用stdcall和cdecl试过了 check.dll文件随附于setup.exe 为什么不起作用 我认为这是不可能的。托管DLL不直接导出函数。从InnoSetup调用DLL需要直接导出函数 当试图从C++中使用托管DLL时,问题是相同的。如前所述,除非使用C
函数检查(版本,目录:字符串):整数;
外部“Check@{src}\Check.dll stdcall”;
然后我把它叫做Check(x,y)
但无法加载DLL
我用stdcall
和cdecl
试过了
check.dll
文件随附于setup.exe
为什么不起作用 我认为这是不可能的。托管DLL不直接导出函数。从InnoSetup调用DLL需要直接导出函数 当试图从C++中使用托管DLL时,问题是相同的。如前所述,除非使用COM,否则无法执行此操作 您应该使用本机Win32 DLL。看看Robert Giesecke的文章 使用从C#程序集导出函数,以便在Inno设置中调用该函数
- 在C中实现一个静态方法#
- 将NuGet包添加到项目中
- 将项目的平台目标设置为x86
- 将
属性添加到方法中DllExport
- 如果需要,为函数参数定义封送处理(特别是必须定义字符串参数的封送处理)
- 建造
[文件]
资料来源:“MyNetDll.dll”;标志:dontcopy
[守则]
函数RegexMatch(模式:string;输入:string):布尔;
外部的RegexMatch@files:MyNetDll.dll stdcall';
现在您可以使用您的功能:
如果RegexMatch('[0-9]+','123456789'),则
开始
日志(“匹配”);
结束
其他的
开始
日志(“不匹配”);
结束;
另见:
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;
}
}
}