gpt4 book ai didi

C# DLL 导出到 Inno-Setup - 错误 E0434F4D

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:12 26 4
gpt4 key购买 nike

我有一个 C# DLL,我通过 RGiesecke.DllExport 从中导出一个方法。

当我从 C# 控制台应用程序调用导出的方法时,一切正常但我在 Inno-Setup 中使用它,出现以下错误:

enter image description here

导出的方法使用另一个 DLL 中的另一个方法。对我来说奇怪的是为什么我可以从另一个类而不是另一个 DLL 调用方法。在下面的示例中,我标记了不起作用的方法。

我的问题是,为什么会出现此错误?

第一个 DLL

namespace ExposeTestLibrary
{
public class TestClass
{
[DllExport("Test2", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static void Test2()
{
//works
TestClass tc = new TestClass();
tc.DoSomething2();

//works
SubLib2 sl2 = new SubLib2();
sl2.DoSomething3();

//Doesn't work
SubLib sl = new SubLib();
sl.DoSomething();
}

public void DoSomething2()
{
System.Windows.Forms.MessageBox.Show("DoSomething2");
}
}

public class SubLib2
{
public SubLib2()
{

}

public void DoSomething3()
{
System.Windows.Forms.MessageBox.Show("DoSomething3");
}
}
}

第二个 DLL

namespace ExposeSubLibrary
{
public class SubLib
{
public SubLib()
{

}

public void DoSomething()
{
System.Windows.Forms.MessageBox.Show("DoSomething");
}
}
}

这是我在 Inno-Setup

中的调用方式
[Code]
procedure Test2();
external 'Test2@{src}\ExposeTestLibrary.dll stdcall loadwithalteredsearchpath';

function InitializeSetup:boolean;
begin
MsgBox('WAIT', mbInformation, MB_OK);
Test2();
result:=true;
end;

最佳答案

Hans 是对的,你必须考虑如何报告或记录错误。

但是,在您的情况下,我猜问题是 CLR 找不到其他程序集。程序集不是相对于使用它们的程序集而是相对于当前应用程序域的探测路径来解析的。在您的情况下,appdomain 将是默认的,您的探测路径将是可执行文件的目录。

您可以在 TestClass 的静态构造函数中为 AssemblyResolve 设置处理程序。或者只是 assembly.load 它一次及其完整的文件名(也在静态 ctor 中)。

关于C# DLL 导出到 Inno-Setup - 错误 E0434F4D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com