从C ++调用VB DLL

时间:2012-06-21 16:05:42

标签: c++ vb.net dll com

对于如何做到这一点,我有点神秘。我已经按照Best way to use a VB.NET class library from a C++ DLL?的说明进行了操作,但是对VB不熟悉我不知道我是否将VB部分放在一边,更不用说C ++了。如果有人可以帮助我,我会为了后人的缘故更正下面的代码!

这里是:VB第一;该项目是一个类库,除了在项目属性中打开“Register for COM interop”之外,所有设置都是默认的。

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正确吗?我需要添加类似界面的东西吗?
  2. 假设我想通过COM而不是C ++ / CLI调用它,我该怎么做。 (这似乎是合乎逻辑的选择,因为客户端已经通过COM调用其他东西;但是,我不知道从哪里获取IDispatch指针,在我的其他代码中它由客户端传递给我)。
  3. 如果我采用C ++ / CLI路线,当从玩具项目升级到实际实施时,这意味着将现有的C ++代码从“无clr支持”更改为“/ clr” - 是否可能会破坏它? / LI>

1 个答案:

答案 0 :(得分:0)

对于任何人的未来参考,就像我写这个问题时一样困惑。我使用了COM路由(不是C ++ / CLI,因为它涉及更改现有项目的设置)。在这里更正代码:

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