我有一个用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();
我遇到以下两个问题
一个。 dll在步骤#1中成功注册了警告,例如我忽略了以下警告,因为他们提到了我不需要的类。
类型库导出器警告处理ThirdPartyDll.AnotherClassThatIDontUse,ThirdPartyDll。警告:类型库导出器遇到的类型派生自泛型类,并且未标记为[ClassInterface(ClassInterfaceType.None)]。不能为这些类型公开类接口。考虑使用[ClassInterface(ClassInterfaceType.None)]标记类型,并使用ComDefaultInterface属性将显式接口公开为COM的默认接口。
B中。 ThirdPartyClassPtr类中没有可用的方法在C ++代码中可见。可以调用的唯一方法是以下方法,它们不是由ThirdPartyClass定义的,而是由其他东西定义的(可能是编译器在处理导入命令时)。
任何想法可能出错?
答案 0 :(得分:1)
如果它是VB.NET Dll,要了解它是如何工作的,我将首先使用dll编写一个虚拟项目(C#,VB,无论你喜欢什么),然后你会看到方法,属性等,然后你应该能够翻译这个