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

时间:2015-07-08 16:09:05

标签: c# dll c++-cli 7zip

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

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

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

请帮忙

1 个答案:

答案 0 :(得分:0)

嗯,Hans Passant指出SevenZipSharp让我的答案毫无用处;-)我会把它留给纯粹的教育目的。如果其他人已经为你完成了它,则无需编写自己的COM互操作包装器。

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

虽然C#具有出色的COM互操作支持,但它需要在C#中重新声明相关的COM接口,或者使用后期绑定的dynamic魔法。但是,对于7z大小的项目来说,这两个选项都是非常重要的,所以第二个认为最好坚持使用C ++ / CLI包装器方法。

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

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