3

vb6オブジェクトからパラメーターを使用してプロパティを取得および設定する必要があります。

Property Prop(ByVal type As SomeEnum) As Currency

これが私がオブジェクトのインスタンスを作成する方法です:

dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(progID));

私はc#でvb6構文を試しましたが、機能しません(コンパイルすらしません):

obj.Prop(enumValue) = 1.2m;

したがって、問題は次のとおりです。c#からパラメータを使用してvb6プロパティを取得および設定するにはどうすればよいですか?

編集:

このメソッドはでは機能しませんdynamic。AFAIKそれはCOM相互運用機能で動作します:

obj.get_Prop(enumValue);
obj.set_Prop(enumValue, newValue);

リフレクションアプローチは問題なく機能しますが、冗長すぎます。

obj.GetType().InvokeMember("Prop", System.Reflection.BindingFlags.Public |
    System.Reflection.BindingFlags.SetProperty, null, obj,
    new object[] { enumValue, 1.2m });

プロパティインデクサーアプローチも機能します。

obj.Prop[enumValue] = 1.2m;
4

2 に答える 2

3

C#では、プロパティインデクサーは配列のように記述されます。

obj.Prop[enumValue] = 1.2m;
于 2012-04-27T18:50:08.020 に答える
0

これについて100%確信はありませんが、VB6 COMオブジェクトのプロパティは実際にはC#のメソッドに変換されていると思います。

したがって、プロパティGetはobj.get_Prop();になります。プロパティセットはobj.set_Prop(newValue);になります。

于 2012-04-26T16:20:58.713 に答える