2

現在、次のような COM コンポーネントのインターフェイスがあります。

[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("aa950e58-7c6e-4818-8fc9-adecbc7a8f14")]
    public interface MyIObjects
    {
        void set_price(float rx);
        void set_size(long rx);

        float get_price();
        long get_size();
    }

次の2行を1行に減らす簡単なショートカットがありますか

            void set_price(float rx);
            float get_price();

私はクラスでこのようなことができることを知っています

int Price { get; set; }

しかし、これはインターフェースで機能しますか?

4

2 に答える 2

1

COM はインターフェイスのみを考慮し、実装は考慮しません。自動プロパティ定義に似た構文でプロパティを既に宣言しています。

[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMyObjects
{
    float price { get; set; }
    int size { get; set; }
}

プロパティをどのように実装するかは、完全にあなた次第です。はい、インターフェイスを実装するクラスで自動プロパティを使用しても問題ありません。

[ComVisible(true), ClassInterface(ClassInterfaceType.None)]
public class MyObjects : IMyObjects {
    public float price { get; set; }
    public int size { get; set; }
}

COM タイプ ライブラリまたはネイティブ コードに表示されるlong型は、C#のint型と同じであることに注意してください。


インターフェイスの IDL 定義は次のようになります (名前空間内を想定CSDllCOMServer)

[
  odl,
  uuid(AA950E58-7C6E-4818-8FC9-ADECBC7A8F14),
  version(1.0),
  oleautomation,
  custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "CSDllCOMServer.MyIObjects")

]
interface MyIObjects : IUnknown {
    [propget]
    HRESULT _stdcall price([out, retval] single* pRetVal);
    [propput]
    HRESULT _stdcall price([in] single pRetVal);
    [propget]
    HRESULT _stdcall size([out, retval] long* pRetVal);
    [propput]
    HRESULT _stdcall size([in] long pRetVal);
};
于 2013-05-23T18:35:11.033 に答える
0

インターフェイスでプロパティを宣言できます。

于 2013-05-23T16:56:20.000 に答える