c ++:使用Visual Basic dll

时间:2013-11-27 21:30:13

标签: c++ vb.net dll com typelib

我有一个用Visual Basic编写的第三部分DLL,我试图从C ++中使用它。我没有它的源文件和头文件,只是有关于其类和方法包括其签名的文档。

我发现一些文章声明我不能直接使用该DLL,因为它是用Visual Basic编写的,这是管理的,我应该通过COM使用它

  1. 注册DLL:regasm / codebase /tlb:ThirdPartyDll.tlb ThirdPartyDll.dll

  2. 导入它:#import“../ Debug / ThirdPartyDll.tlb”

  3. 初始化COM:CoInitialize(NULL);

  4. 实例化对象: ThirdPartyClassPtr ptrThirdPartyClass( _uuidof(ThirdPartyDll :: ThirdPartyClass));

  5. 调用对象的方法:ptrThirdPartyClass-> ThirdPartyClassMethod();

  6. 我遇到以下两个问题

    一个。 dll在步骤#1中成功注册了警告,例如我忽略了以下警告,因为他们提到了我不需要的类。

    类型库导出器警告处理ThirdPartyDll.AnotherClassThatIDontUse,ThirdPartyDll。警告:类型库导出器遇到的类型派生自泛型类,并且未标记为[ClassInterface(ClassInterfaceType.None)]。不能为这些类型公开类接口。考虑使用[ClassInterface(ClassInterfaceType.None)]标记类型,并使用ComDefaultInterface属性将显式接口公开为COM的默认接口。

    B中。 ThirdPartyClassPtr类中没有可用的方法在C ++代码中可见。可以调用的唯一方法是以下方法,它们不是由ThirdPartyClass定义的,而是由其他东西定义的(可能是编译器在处理导入命令时)。

    • 的AddRef
    • GetIDsOfName
    • GetTypeInfo的
    • GetTypeInfoCount
    • 调用
    • 的QueryInterface
    • 推出

    任何想法可能出错?

1 个答案:

答案 0 :(得分:1)

如果它是VB.NET Dll,要了解它是如何工作的,我将首先使用dll编写一个虚拟项目(C#,VB,无论你喜欢什么),然后你会看到方法,属性等,然后你应该能够翻译这个