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

标签 c# inno-setup dllexport

我有一个 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 无法找到其他程序集。 程序集不是相对于使用它们的程序集而是相对于当前应用程序域的探测路径来解析的。 在您的情况下,应用程序域将是默认的,您的探测路径将是可执行文件的目录。

您可以在 TestClass 的静态构造函数中为 AssemblyResolve 设置处理程序。或者只是用完整文件名(也在静态构造函数中)将它加载一次。

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

相关文章:

inno-setup - 如何读取 Pascal 代码中的 [Setup] 参数?

c++ - 使用 __declspec(dllexport) 时出错 : Unknown type name '__declspec'

64-bit - x64 位平台无法识别 dllexport

c# - 从表中选择较大的 ID

c# - 测试因 ShimNotSupportedException 而失败

c# - EF Core Composite Key,一个外键,一个自增

c++ - 在 x64 环境中编译代码时出现 LNK2001 错误。但是代码在x86环境下编译得很好

c# - 用更多的代码对 bool 进行一次评估还是用更少的代码多次评估更好?

caching - inno-setup 的磁盘缓存问题?

windows - 根据安装程序处于用户模式还是管理员模式更改环境注册表项