0

バックグラウンド

これは信じられないほど基本的なことかもしれませんし、完全に不可能かもしれません。COM は初めてなのでわかりませんが、COM の語彙が限られているため、Google は私を失望させました。

内部で定義された多くのデータ構造を持つ ATL/MFC C++ COM オブジェクトがあります。この COM オブジェクトを参照する C# プロジェクトもあります。C# では、C++ 側の .IDL ファイルを介して公開されたメソッドを呼び出して、有効な結果を得ることができます (最終的に! )。

質問

.IDL ファイルを使用して、100 程度の C++ データ構造を何らかの方法で C# に公開したいと考えています (できれば、それぞれを個別にラップせずに)。次に、C# で適切な構造体を作成し、データ構造体を C++ に渡す COM メソッドを呼び出すだけです。

基本的に、既に定義されている C++ 構造を C# で再利用したいと考えています。これは可能ですか?もしそうなら、どのように?

問題があれば、私は Visual Studio 2010 と .NET 4 Framework を使用しています。

本当にありがとう。

4

1 に答える 1

0

そのため、IDLファイルの間違った場所に構造を配置しようとしていたことがわかりました。私はそれを定義に追加しようとしましたがlibrary、何らかの理由でそれは機能しませんでした。

それをインターフェース定義に配置すると、うまく機能することになりました:

...
interface Icontrol : IDispatch{
[ 
uuid(...), 
version(1.0) ] 
typedef struct fake
{ 
    int x;
    int y;
    int z;
} fake; 
[id(1)] HRESULT open_connection([out,retval] VARIANT_BOOL* result);
...

これは、型が1:1でC#型にマップされない場合の対処方法の質問には答えませんが、少なくともC#でC++で定義された構造を使用できます。

于 2012-08-20T12:10:50.877 に答える