2011-12-20 8 views
1

C#とWinFormsを使用してアプリケーションを作成しています。私は第三者によって提供されるActiveXコントロールを持っています。 ActiveXコントロールをフォームにドラッグし、コントロールが実装するクラスのインスタンスを取得します(「ウィジェット」と呼びます)。ヘッダーファイルなしでCOMインターフェイスポインタを宣言する

今や、インターフェイスポインタIWidgetをC#から従来のC++コードに渡す必要があります。私はdllにC++コードを入れ、P/Invokeを使ってC#から呼び出す予定です。問題は、C++コードにIWidget定義を与える方法がわからないことです。 C++コードの原作者はヘッダーファイル(widget.h)を持っていたので、widget.hを#includeしてIWidgetポインターを宣言することができました。

私は.hを持っていません(取得できません)。私はActiveXを持っているだけです。だから私はどのように私のDLLにIWidgetのポインタを宣言できますか?

これまでのところ、私の唯一のアイデアは、ActiveX DLLからIDLファイルを作成することです。それは合理的なアプローチですか?

おかげで、 マーク

+4

ため

参照くださいHOWTO。 http://msdn.microsoft.com/en-us/library/8etzzkb6%28v=VS.90%29.aspx –

+0

IDLにはIWidgetの定義がありますか?それを投稿すると、C#を取得できるはずです。 –

+0

#importは有望です。私はカップルの日にチャンスを得るときにそれを試みます。回答いただきありがとうございます。 –

答えて

0

あなたは、アセンブリを作成し、管理のiWidgetがあるべきTlbimp.exeをしたActiveXからのインポートメタデータを試すことができます。この管理対象バージョンのインターフェイスと[ClassInterface(ClassInterfaceType.AutoDispatch)]を使用してクラスを作成する場合は、ActiveXに渡されます。 #importディレクティブを使用します。tlbimp activex-wrap

関連する問題