1

私はこれを行う方法について少し戸惑っています。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;
}

具体的な質問:

  1. VBは正しいですか?インターフェイスのようなものを追加する必要がありますか?
  2. C++/CLI ではなく COM 経由で呼び出したいと仮定すると、どうすればよいでしょうか。(これは、クライアントが既に COM 経由で他のものを呼び出しているため、論理的な選択のように思えます。ただし、IDispatch ポインターをどこから取得すればよいかわかりません。他のコードでは、クライアントから渡されます)。
  3. おもちゃのプロジェクトから実際の実装に移行するときに C++/CLI ルートを使用した場合、既存の C++ コードを「clr サポートなし」から「/clr」に変更することになります。
4

1 に答える 1

0

私がこの質問を書いたときと同じように混乱している人の将来の参考のために。私はCOMルートに行きました(既存のプロジェクトの設定を変更する必要があるため、C ++ / CLIではありません)。ここで正しいコード:

CoCreateInstanceを使用してC++からCOMVisibleVB.Netdllを呼び出す

于 2012-06-23T08:56:04.830 に答える