我正在尝试在我的应用程序代码中使用7zip。在7zip的网站上,他们说我可以使用7z.dll。所以,我试图从C#中引用它,但这不起作用。所以,我决定编写一个引用7z.dll的C ++库,然后我可以从C#引用该库。
我能够在我的C ++库中加载库(我认为),并且我能够从C#引用该库并成功调用方法。
但是,我不知道如何找出7z.dll库中的方法名称,以便我可以调用它们。
请帮忙
答案 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
。