私はCOMとC#に新しいですし、私は、サードパーティ製のプログラムによって公開されるCOMオブジェクトに機能を追加したいと思います。C#でCOMオブジェクトに機能を追加するにはどうすればよいですか?
最初は私の意図はCOMオブジェクトクラスから継承することでしたが、それほど単純ではないことがわかりました(たとえばhere)。
現在、私は2つのインターフェース(すなわちIComAuto
とComAuto
)と関連するクラス(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でこれまでに発見したことは私のような初心者のために少し不可解な音)に、このまたはポイントにいくつかの光を当てることができれば私は幸いです。
は、COMは、超純粋なインターフェースベースのパラダイムを使用しています。 ComAutoClassから派生することで継承を使用することは可能ですが、間違いなく相互運用型を埋め込むことはできません。 1つ以上のDLLを展開することは、世界の終わりではありません。技術的に、あなたは、それを自分で埋め込むILSpyやリフレクターやコピー/ペーストComAutoClassのような逆コンパイラを使用することができます。名前を変更します。しかし、COMコンポーネントが決して再び変わることは絶対に不可欠です。 –