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

Adi*_*hag 3 c# dll

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

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

Assembly ass = Assembly.Load("XceedZip");
Run Code Online (Sandbox Code Playgroud)

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

请帮忙,谢谢

#

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

问题解决了,谢谢大家

Dar*_*rov 6

我怀疑这个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);
Run Code Online (Sandbox Code Playgroud)

然后调用它:

MessageBox(IntPtr.Zero, "Text", "Caption", 0);
Run Code Online (Sandbox Code Playgroud)

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

  • 它们当然是托管程序集。Xceed 没有任何用于 ZIP 的非托管库。 (2认同)