我对如何做到这一点有些迷惑。我已经按照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;
}


具体问题:


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

最佳答案

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

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

09-10 04:30
查看更多