2016-11-30 10 views
-1

私はCOMとC#に新しいですし、私は、サードパーティ製のプログラムによって公開されるCOMオブジェクトに機能を追加したいと思います。C#でCOMオブジェクトに機能を追加するにはどうすればよいですか?

最初は私の意図はCOMオブジェクトクラスから継承することでしたが、それほど単純ではないことがわかりました(たとえばhere)。

現在、私は2つのインターフェース(すなわちIComAutoComAuto)と関連するクラス(ComAutoClass)を持っています。

ComAutoオブジェクトにカスタムメソッドを追加するには、このインターフェイスから継承し、ComAutoオブジェクトをプライベートフィールドに格納して実装するクラスComObjectWrapperを作成しました。

class ComObjectWrapper : ComAuto 
{ 
    private readonly ComAuto ComObj; 

    public ComObjectWrapper() : base() 
    { 
     ComObj = new ComAuto(); 
    } 

    public short method1(object param) 
    { 
     return ComObj.method1(param); 
    } 
    ... 
} 

私は、これは私が内部ComAutoオブジェクトに元のメソッドへのコールをリダイレクトする必要があるとして、これを行うための最善の方法ではない気がします。

プロパティをVS2015のfalseに設定して直接ComAutoClassから継承することを試みました。これは、私はすでに書かれているコードはstring期待するときobjectとして値を返すために、いくつかの方法を導きました。従って私はstringにいくつかのキャストを追加するために、すべての書かれたコードを通過しなければなりません。理想的ではなく、しかも私はEmbed Interop typesが何であるかを完全に理解していません。

誰でもいくつかの有用な記事(私はMSDNでこれまでに発見したことは私のような初心者のために少し不可解な音)に、このまたはポイントにいくつかの光を当てることができれば私は幸いです。

+1

は、COMは、超純粋なインターフェースベースのパラダイムを使用しています。 ComAutoClassから派生することで継承を使用することは可能ですが、間違いなく相互運用型を埋め込むことはできません。 1つ以上のDLLを展開することは、世界の終わりではありません。技術的に、あなたは、それを自分で埋め込むILSpyやリフレクターやコピー/ペーストComAutoClassのような逆コンパイラを使用することができます。名前を変更します。しかし、COMコンポーネントが決して再び変わることは絶対に不可欠です。 –

答えて

1

extension methodsのための完全なユースケースのような音:

ここには本当の幸せの答え
public static class ComAutoExtensions 
{ 
    public static short Method1(this ComAuto com, object param) 
    { 
     return com.GetShortValue(param); 
    } 
} 
+0

それは確かに!ありがとう、私はそれについて知らなかった。 –

関連する問題