VB10,自动实现的属性和COM

时间:2010-11-30 22:04:01

标签: vb.net com interop properties

我最近完成了一个我们用来将Access绑定到某些WCF服务的类。当然,这意味着.Net类(及其所有属性)需要对COM可见。鉴于我使用VB10并且Contact类有大约20个属性,我继续使用自动实现属性。

令我惊讶的是,无法从Access中的VBA内访问这些属性。我尝试将属性标记为ComVisible(我过去不需要使用标准属性),但它仍然无效。将自动属性更改为标准属性后,一切正常。

Public Property FirstName As String

成了

Public Property FirstName As String
    Get
        return _strFirstName
    End Get
    Set
        _strFirstName = value
    End Set
End Property

我的理解是两者应该是等价的。根据我在MSDN上阅读的内容,自动实现属性只需为您创建支持字段和getter / setter,并且无论如何都应该是相同的。

显然他们不是,那么幕后还有什么呢?

1 个答案:

答案 0 :(得分:2)

他们是。一些示例代码:

<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.AutoDual)> _
Public Class Class1
    Private prop As Boolean
    Public Property BoolProp() As Boolean
        Get
            Return prop
        End Get
        Set(ByVal value As Boolean)
            prop = value
        End Set
    End Property

    Public Property BoolProp2() As Boolean
End Class

使用命令:

  

tlbexp ClassLibrary1.dll
  oleview ClassLibrary2.tlb

生成此接口转储:

interface _Class1 : IDispatch {
    [id(00000000), propget,
      custom(54FC8F55-38DE-4703-9C4E-250351302B1C, 1)]
    HRESULT ToString([out, retval] BSTR* pRetVal);
    [id(0x60020001)]
    HRESULT Equals(
                    [in] VARIANT obj, 
                    [out, retval] VARIANT_BOOL* pRetVal);
    [id(0x60020002)]
    HRESULT GetHashCode([out, retval] long* pRetVal);
    [id(0x60020003)]
    HRESULT GetType([out, retval] _Type** pRetVal);
    [id(0x60020004), propget]
    HRESULT BoolProp([out, retval] VARIANT_BOOL* pRetVal);
    [id(0x60020004), propput]
    HRESULT BoolProp([in] VARIANT_BOOL pRetVal);
    [id(0x60020006), propget]
    HRESULT BoolProp2([out, retval] VARIANT_BOOL* pRetVal);
    [id(0x60020006), propput]
    HRESULT BoolProp2([in] VARIANT_BOOL pRetVal);
};

就在那里。你做错了什么,不知道是什么。