C#模块预计包含程序集清单

嗨,我是C#世界的新手。 我不得不使用它,因为依赖于来自多播源的xceedzip.dll压缩数据。 在将一些代码用于接收订阅源之后,我面临着调用此dll的障碍。 从我的理解,我需要使用“System.Reflection”并调用DLL。

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

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

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

请帮忙,谢谢

好的,谢谢你的所有回复,我有一个工作版本的dll跟随tlbimp命令加载到我的环境中。 我遇到了Uncompress方法签名的问题。 我需要提供一个“ref对象”和一个“out对象”作为源(压缩)和目标(未压缩)对象。 我尝试将字节数组加载到这些位置,但它会抛出一个无效的参数错误。 帮助“参考对象”和“对象”赞赏…

问题解决了,谢谢大家

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

例如,如果你想调用MessageBox本机函数(实际上你永远不需要这样做,因为已经有一个托管等价物,但是为了这个演示它应该没问题)你可以编写一个包装器:

 [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中包含的非托管函数执行相同的操作。 您必须检查文档以查看确切的非托管签名,这将有助于您定义托管包装器。

尝试清理解决方案,然后再次构建。 这项工作对我来说非常好。

从我的理解,我需要使用“System.Reflection”并调用DLL。

不,你没有。 您可以在项目中添加对DLL的引用(因为它是托管程序集 ),然后使用DLL中的类及其方法。

您将收到有关使用哪些类和方法以及他们期望的参数的文档。

第一年我不会支付640欧元,而下一年每年只需支付320欧元的ZIP库,但这或许有点偏离外表。