[visual-studio]我可以在 COM 接口自动属性吗

标签: Visual-Studio
发布时间: 2014/3/1 3:58:51
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

目前,我有的是像这样的 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();
    }

现在有没有可能会减少到一条线以下的两行简单快捷

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

我知道在类中,这样可以做

int Price { get; set; }

但将此接口中的工作吗?

解决方法 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 类型库或本机代码是在 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);
};
官方微信
官方QQ群
31647020