2017-05-13 22 views
-1

コンテナは自分のメソッドを呼び出すことができるように、IPersistStorageインターフェイスのメソッドをオーバーライドする必要がありますが、コントロールからクラスを実装する必要があります。コントロールをCOMコンポーネントとして登録すると、Wrapper(Com Callable Wrapper) IPersistStorageインターフェイスとコンテナは、ラッパーのメソッドを呼び出します。C#でコントロールのメソッドをオーバーライドします。 COMコンポーネント

私のクラスでIPersistStorageメソッドをオーバーライドする方法、またControlクラス(System.Windows.Forms)を実装する方法はありますか? 問題はコントロールでもなく、インターフェイスやクラスにもこのようなメソッドがありません。

namespace MiniEye 
{ 
    [ProgId("MiniEye")] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [ComVisible(true)] 
    [Guid("BBC06458-A67A-4413-81ED-F85E2FCC20CA")] 
    public partial class MiniEye : UserControl 
    { 
     private const string GUID = "BBC06458-A67A-4413-81ED-F85E2FCC20CA"; 
     public MiniEye() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

上記のツールでUserControlから継承せずにIPersist、(なぜなら、ユーザーコントロールの)IPersistStorageからとlooks like

クラス上記のツールOLEVIEWに継承されるクラスはOLEVIEW looks like

+0

このインターフェイスをControlクラスに追加することは非常に論理的ではありませんが、それは単なるインターフェイスなので、カスタマイズしたいコントロールからクラスを派生させ、[ComVisible]インターフェイスを追加します。これがコントロールをシリアライズ可能にする何らかの試みであれば、そこには行かないでください。うまく終わらないでしょう。 –

+0

実際には動作していません。 –

+0

ラブリー。 「働かない」ための理由はたくさんありますが、IPersistStorageはC#の扱いにくいインターフェイスです.IPersistのメソッドを間違って宣言するのは非常に簡単です。しかし、それが本当の理由であるかどうかはわかりません。 –

答えて

0

最後に私が見つけましたソリューション:2つの可能なバリアントがありました:

最初の変種:"設計時に設定された制御プロパティは保存する必要があるため、再ロードすることができます次の設計セッション、また実行時にここに良いニュースがあります! プロパティを使用してデータを自動的に保存できますが、この方法はあなたに影響を与えません。

2番目の方法は、IUnknown、IDispatch、IOleObject、IViewObject、IPersistStorageなどの基本OLEインターフェイスからクラスを継承し、すべてのメソッドを手作業で記述することです。独自の

関連する問題