我有一个用 Visual Basic 编写的第三方 DLL,我正试图从 C++ 中使用它。我没有它的源文件和头文件,只有关于它的类和方法(包括它们的签名)的文档。
我发现有些文章说我不能直接使用那个dll,因为它是用Visual Basic写的,是托管的,我应该通过COM来使用它
注册 DLL:regasm/codebase/tlb:ThirdPartyDll.tlb ThirdPartyDll.dll
导入它:#import "../Debug/ThirdPartyDll.tlb"
初始化 COM:CoInitialize(NULL);
实例化对象:ThirdPartyClassPtr ptrThirdPartyClass(_uuidof(ThirdPartyDll::ThirdPartyClass));
调用对象的方法:ptrThirdPartyClass->ThirdPartyClassMethod();
我有以下两个问题
一个。在步骤 #1 中成功注册了 dll,但我忽略了如下警告,因为它们提到了我不需要的类。
类型库导出器警告处理 ThirdPartyDll.AnotherClassThatIDontUse, ThirdPartyDll。警告:类型库导出器遇到了派生自泛型类且未标记为 [ClassInterface(ClassInterfaceType.None)] 的类型。不能为此类类型公开类接口(interface)。考虑使用 [ClassInterface(ClassInterfaceType.None)] 标记类型,并使用 ComDefaultInterface 属性将显式接口(interface)作为默认接口(interface)公开给 COM。
B. ThirdPartyClassPtr 类中可用的所有方法在 C++ 代码中都不可见。唯一可以调用的方法是以下方法,它们不是由 ThirdPartyClass 定义的,而是由其他东西定义的(可能是编译器在处理导入命令时定义的)。
- 添加引用
- 获取IDsOfName
- 获取类型信息
- 获取类型信息数
- 调用
- 查询接口(interface)
- 发布
任何想法可能是错误的?
最佳答案
如果它是一个 VB.NET Dll,为了了解它是如何工作的,我会开始使用 dll 编写一个虚拟项目(C#、VB,无论你喜欢什么),然后你会看到方法、属性等等,然后你应该能够翻译这个
关于c++: 使用 Visual Basic dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20253444/