簡體   English   中英

C#結構的屬性在COM和VB6中得到不可用的名稱?

[英]Properties of C# structs get unusable names in COM and VB6?

我的C#代碼有一個struct ,我正在導出到COM。 這個結構的屬性是通過在VB6中甚至不是有效語法的奇怪名稱來實現的,因此無法訪問它們。

有沒有辦法讓這些用普通的,可用的名字導出? 我錯過了一個屬性或什么?


COM / VB6中名稱的格式為:

<original_name>k__BackingField

其中只有original_name部分在我的C#代碼中。

我只能在VB6對象瀏覽器中看到這些瘋狂的屬性名稱,Intellisense不會顯示它。

這是正在構建的(稍微清理過的)代碼:

[Guid("....")]
[ComVisible(true)]
public struct MyStruct
{
    public string StringA { get; set; }
    public string StringB { get; set; }

    public MyStruct(string a, string b)
    {
        StringA = a;
        StringB = b;
    }

    ... // some other methods, no fields or properties
}

為了更好地衡量,這里是生成的IDL:

typedef [uuid(....), version(1.0), custom(xxxx, MyNamespace.MyStruct)]
struct tagMyStruct {
    LPSTR <StringA>k__BackingField;
    LPSTR <StringB>k__BackingField;
} MyStruct;

如OleView所示。 我可以看到它包含與k__BackingField提到的相同的k__BackingField 所以這些名稱似乎來自C#typelib導出過程。

public string StringA { get; set; } public string StringA { get; set; }只是以下的簡短形式

private string _stringA_BackingField;
public string StringA
{
  get { return _stringA_BackingField; }
  set { _stringA_BackingField = value; }
}

由於COM結構只包含字段而沒有屬性,因此您將看到支持字段。 如果將代碼更改為以下代碼,則示例應該有效:

[Guid("....")]
[ComVisible(true)]
public struct MyStruct
{
    public string StringA;
    public string StringB;
}

根據定義, struct類型是一種值類型,通常用於封裝一小組相關變量。

如果要提供屬性或方法,則需要使用class 您可以在此處找到有關結構的更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM