私はこれを行う方法について少し戸惑っています。C++ DLL から VB.NET クラス ライブラリを使用する最良の方法の指示に従いましたか? しかし、VB を初めて使用するので、C++ はもちろん、VB の部分が正しいかどうかもわかりません。誰かがここで私を助けることができれば、後世のために以下のコードを修正します!
ここにそれらがあります: 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は正しいですか?インターフェイスのようなものを追加する必要がありますか?
- C++/CLI ではなく COM 経由で呼び出したいと仮定すると、どうすればよいでしょうか。(これは、クライアントが既に COM 経由で他のものを呼び出しているため、論理的な選択のように思えます。ただし、IDispatch ポインターをどこから取得すればよいかわかりません。他のコードでは、クライアントから渡されます)。
- おもちゃのプロジェクトから実際の実装に移行するときに C++/CLI ルートを使用した場合、既存の C++ コードを「clr サポートなし」から「/clr」に変更することになります。