我对如何做到这一点有点困惑。我已按照有关从 C++ DLL 使用 VB.NET 类库的最佳方式的说明进行操作?但是对于 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++ 代码从“不支持 clr”更改为“/clr”——这可能会破坏它吗?