我试图在安装过程中调用 C# dll 来修改我的应用程序的 json 配置文件。
我在 StackOverflow 上找到了几篇关于此的帖子,但它们与更旧的版本有关。不幸的是,他们都没有为我工作。对于 DLL,我使用了 Inno 附带的示例 C# 项目并添加了我的方法。除了添加我的方法之外,我没有以任何其他方式修改项目或解决方案。对于 Inno 项目,我从头开始创建了一个应用程序。
版本号:
Inno Setup 6.0.3
C#:Framework 4.5
C# 片段:
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
public static int Test([MarshalAs(UnmanagedType.BStr)] out string strout)
{
strout = "Hello World!";
return 0; // indicates success
}
英诺项目:
[Files]
Source: "MyDll.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "example.json"; DestDir: "{app}"; AfterInstall: CallTest
[Code]
function Test(out strout: WideString): Integer;
external 'Test@MyDll.dll stdcall setuponly delayload';
procedure CallTest;
var
retval: Integer;
str: WideString;
begin
MsgBox('Hello from CallTest', mbInformation, MB_OK);
retval := Test(str);
MsgBox('Return str is: ' + str, mbInformation, MB_OK);
end;
Inno 编译正确。在安装过程中,我确实收到弹出消息“Hello from CallTest”,但随后收到错误消息“第 32 行:无法调用 proc”。第 32 行是我们调用 Test 函数的地方,我们将返回值设置为前面定义的 Integer。虽然我们正在调用一个方法(而不是一个过程)并且我查看了 DLL 的返回类型,但我无法弄清楚为什么会出现此错误。任何帮助,将不胜感激。