gpt4 book ai didi

C# 模块应该包含程序集 list

转载 作者:行者123 更新时间:2023-11-30 13:48:48 25 4
gpt4 key购买 nike

大家好,我是 C# 世界的新手。我不得不使用它是因为依赖于来自多播提要的 xceedzip.dll 压缩数据。在拼凑了一些用于接收提要的代码之后,我在调用这个 dll 时遇到了障碍。据我了解,我需要使用“System.Reflection”并调用 dll。

目前我的源代码和 dll 位于同一目录中。代码编译成功。

Assembly ass = Assembly.Load("XceedZip");

我在运行时收到 System.BadImageFormatException:无法加载文件或程序集“XceedZip”或其依赖项之一。该模块应包含程序集 list 。

求助,谢谢

#

好的,感谢您的所有回复,我有一个工作版本的 dll,遵循加载到我的环境中的 tlbimp 命令。我在使用 Uncompress 方法签名时遇到了麻烦。我需要提供一个“ref object”和一个“out object”作为源(压缩)和目标(未压缩)对象。我尝试将字节数组加载到这些位置,但它抛出一个无效参数错误。对“ref object”和“out object”的帮助表示赞赏...

问题解决了,谢谢大家

最佳答案

我怀疑这个 DLL 不是托管程序集,而是包含 native 代码。 Assembly.Load 应该只与托管程序集一起使用。如果您需要从非托管代码调用函数,您可以使用 P/Invoke .该过程涉及为您要调用的非托管函数定义托管包装器。

例如,如果您想调用 MessageBox native 函数(实际上你永远不需要这样做,因为已经有一个托管的等效函数,但对于本演示的目的来说应该没问题)你可以编写一个包装器:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern MessageBoxResult MessageBox(IntPtr hWnd, String text, String caption, int options);

然后调用它:

MessageBox(IntPtr.Zero, "Text", "Caption", 0);

您必须对 DLL 中包含的非托管函数执行相同的操作。您将必须检查文档以查看确切的非托管签名,这将帮助您定义托管包装器。

关于C# 模块应该包含程序集 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11343867/

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