1

COM 相互運用機能を使用して .NET dll と対話する必要がある C++ クラスがあります。

私は持っている:

1. 操作オブジェクトが .net インスタンスである C++ から呼び出されるメソッド:

   m_pCommManager.CreateInstance(__uuidof(CHmHTTPManager));
    m_pCommManager->Communicate(/*string parameter*/);

2. C++ クラスが準拠する必要がある、次のメソッドを持つ .net インターフェイス:

 void ResponseRecieved(/*string parameter*/)

私の質問は次のとおりです。選択する必要があるパラメーターの種類は次のとおりです。

A. 両側でストリングとして操作しやすい (キャスティングでも)。

B. 両方の環境で受け入れ可能 (C++ と .net は同じではないため、「文字列」は使用できません)

具体的な使用例は大歓迎です。

4

1 に答える 1

0

C++ ではBSTR文字列を使用する必要があります。

MSDN から:

BSTR は、長さのプレフィックス、データ文字列、およびターミネータで構成される複合データ型です。次の表では、これらのコンポーネントについて説明します。

BSTR は COM メモリ割り当て関数を使用して割り当てられるため、メモリ割り当てを気にせずにメソッドから返すことができます。

COM オブジェクトの IDL ファイルでは、次のようになります。

HRESULT mySampleMethod([in] BSTR mySampleParam);

C++ の実際のコードがどのように見えるかは、開発している COM オブジェクト/タイプ ライブラリのタイプによって異なります (つまり、MFC ベースの COM オブジェクトを使用しているか、ATL ベースの COM オブジェクトを使用しているかということです)。いずれにせよ、Visual Studio のウィザードを使用してタイプ ライブラリを作成/変更することをお勧めします。

.Net 側では、通常の文字列型を使用するだけで、COM オブジェクトのタイプ ライブラリでパラメーターが BSTR として定義されている場合、自動的にマーシャリングされます。

この質問も役立つ場合があります。

BSTR を C# から COM 関数に渡すための規則 (COM 相互運用)

于 2012-06-28T15:56:04.393 に答える