我试图将用C#编写的DLL加载到Inno Setup中。
以下是代码:
function Check(version, dir: String): Integer;
external 'Check@{src}\check.dll stdcall';
然后我称之为Check(x,y)
但是DLL无法加载。
我尝试使用stdcall
和cdecl
。
check.dll
文件位于setup.exe
。
为什么它不起作用?
答案 0 :(得分:3)
看看Robert Giesecke的Unmanaged Exports。
答案 1 :(得分:3)
使用Unmanaged Exports导出C#程序集中的函数,以便可以在Inno Setup中调用它。
<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。