c++ - 从 C++ 调用 VB DLL

标签 c++ vb.net dll com

我对如何做到这一点有点迷惑。我已按照 Best way to use a VB.NET class library from a C++ DLL? 上的说明进行操作但是作为 VB 的新手,我不知道我是否掌握了 VB 部分,更不用说 C++ 了。如果有人可以在这里帮助我,为了后代,我会更正下面的代码!

它们在这里:首先是 VB;该项目是一个类库,所有设置都是默认设置,除了在项目属性中打开了“为 COM 互操作注册”。

Public Class Class1
    Public Sub New()
        'do stuff
    End Sub

    Public Sub increment()
        'do stuff
    End Sub
End Class

这是 C++,它是一个控制台应用程序,启用了 CLR 支持:

#include <iostream>
#import "..\ClassLibrary1\bin\Debug\ClassLibrary1.tlb" raw_interfaces_only

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "hello world" << endl;
    HRESULT hr = CoInitialize(NULL);
    long lResult = 0;

    Class1 c1; //compiler fails on this, doesn't know what Class1 is
    c1.increment();

    //wait for console key press then exit
    char x;
    cin >> x;
    CoUninitialize();
    return 0;
}

具体问题:

  1. VB 正确吗?我需要向它添加任何类似接口(interface)的东西吗?
  2. 假设我想通过 COM 而不是 C++/CLI 调用它,我该怎么做。 (这似乎是合乎逻辑的选择,因为客户端已经通过 COM 调用了其他东西;但是,我不确定从哪里获取 IDispatch 指针,在我的其他代码中它是由客户端传递给我的)。
  3. 如果我走 C++/CLI 路线,当从玩具项目升级到实际实现时,这意味着将我现有的 C++ 代码从“不支持 clr”更改为“/clr”——这可能会破坏它吗?

最佳答案

供任何像我写这个问题时一样困惑的人将来引用。我选择了 COM 路线(不是 C++/CLI,因为那样会涉及更改现有项目的设置)。此处的正确代码:

Calling COMVisible VB.Net dll from C++ using CoCreateInstance

关于c++ - 从 C++ 调用 VB DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11142217/

相关文章:

c++ - 基于 list 的 ETW 提供程序 - 解码文件位置

c++ - 在 Eclipse CDT 中使用与另一个项目相同的设置创建一个新的 C++ 项目

c++ - 使用带有多个模板参数的 CRTP 时如何声明模板默认值?

.net - 不会在表单加载时触发的 SelectedIndexChanged 替代方案?

vb.net - COM 与非 COM DLL

c - 列出导入的PE文件的DLL

C++ 编译器错误

c# - 这个 C# 语法的 VB 等价物是什么,处理委托(delegate)?

vb.net - 将 Excel 电子表格另存为 PDF

LabVIEW 中的套接字