0

生成された COM Interop アセンブリでget_Dataとして使用できるDataプロパティを持つMyCOMCtlクラスを持つCOM コントロールがあります。この COM コントロールに対して、次の 2 つの異なる相互運用機能アセンブリが生成されます。

  1. VS2010 に COM コントロールを追加すると、相互運用機能 (および Ax...) が自動的に生成されます。
  2. VS2010 コマンド プロンプトから TLBIMP v4 ツールを使用します。

問題は、相互運用アセンブリが TLBIMP を使用して生成されると、get_Data が次のようになることです。

dynamic MyCOMCtl::get_Data(...)

しかし、VS2010 によって自動生成されると、次のようになります。

object MyCOMCtl::get_Data(...)

私のコードには、 objectを返す 2 番目のコードが必要です。VS2010 プロジェクトは.NET Framwork 4 Client Profileをターゲットにしており、TLBIMP のバージョンは 4.0.30319.1 です。

なぜこうなった?これを修正する方法はありますか?

4

1 に答える 1

0

私はあなたが物事を混同していると思います。後方互換性tlbimpの理由から、動的型を作成しないでください。

ただし、 NoPIAを使用すると、Visual Studio は動的な型を生成します。NoPIA とは、コントロールと一緒にプライマリ相互運用機能アセンブリを出荷する必要がないことを意味します。また、タイプはもはや生成されtlbimpません。代わりに、タイプ ライブラリをインポートするアセンブリ内で直接作成されます。この設定を無効にするには、Visual Studio で COM 参照を右クリックし、[プロパティ] メニューを選択して、[相互運用型の埋め込み] プロパティを false に設定します。Visual Studio で生成された参照もobject戻り値の型を作成することがわかります。

ただし、これはまだ完全に正しいわけではありません。tlbimp を使用してコントロールの (プライマリ) 相互運用ライブラリを生成している場合は、それも参照する必要があります。プロジェクトに COM 参照を追加しないでください。代わりに、tlbimp によって生成された相互運用ライブラリを参照して、これを追加します。

于 2014-06-23T06:46:08.720 に答える