繁体   English   中英

从C ++项目显式链接DLL-(7zip,7z.dll)

[英]Explicit Linking DLL from C++ Project - (7zip, 7z.dll)

我正在尝试从我的应用程序代码中使用7zip。 在7zip的网站上,他们说我可以使用7z.dll。 因此,我尝试从C#引用它,但这没有用。 因此,我决定编写一个引用7z.dll的C ++库,然后可以从C#中引用该库。

我能够在我的C ++库中加载该库(我认为),并且能够从C#引用该库并成功调用方法。

但是,我不知道如何找出7z.dll库中的方法名称,以便我可以调用它们。

请帮忙

嗯,汉斯·帕桑(Hans Passant)指出SevenZipSharp,这使我的回答变得毫无用处;-)我将其纯粹用于教育目的。 如果其他人已经为您完成了操作,则无需编写自己的COM互操作包装器。


我看了看他们的C ++示例(在CPP / 7zip / UI / Client7z下)。 一切都使用COM接口和各种类型的回调完成。

尽管C#具有出色的COM互操作支持,但它需要在C#中重新声明相关的COM接口,或者可能使用后期绑定的dynamic魔术。 但是,对于7z大小的项目,这两个选项都相当重要,因此,第二个想法是,最好还是坚持使用C ++ / CLI包装器方法。

在该示例中,您可以确切地了解它的main NDLL::CLibrary :加载DLL(使用LoadLibrary调用周围的包装器类NDLL::CLibrary ),然后获取指向COM CreateObject函数的指针(通过执行GetProcAddress包装器)内部)。

获得CreateObject函数的地址后,可以使用适当的应用程序和接口GUID调用它,以获取实现它们的对象的实例,然后您可以使用这些对象进行实际的工作。 接口本身在IArchive.h头文件中声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM