私の 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
上記と同じものが含まれていることがわかります。したがって、これらの名前は C# の typelib エクスポート プロセスから来ているようです。