c++: 使用 Visual Basic dll

标签 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();

我有以下两个问题

一个。在步骤 #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/

相关文章:

c# - C# 的 LINEST 函数模拟

c++ - glfwOpenWindowHint 未在此范围内声明 GLFW3 和 GLEW

c# - VB.NET 中的 foreach 是否比 c# 中的更快?

mysql - VB.NET -> 组合框随机索引

c++ - 使用 DLL 代码时堆损坏

c++ - C++ 中的非托管 DLL

c++ - 有没有办法在旧版 C/C++ 编译器中使用 C++ 11 线程对象

c++ - OSX AUGraph 重新创建导致 badComponentType 错误

c++ - 忽略以前版本的 boost C++

c# - ASP.NET Webform 在运行时错误上显示 Error.ASPX 页面