dotNet Interop Usercontrolのデフォルトプロパティ
-
10-07-2019 - |
質問
VB6アプリケーションで使用されるdotNetコントロールのデフォルトプロパティを設定する必要があります。
<ComClass(myControl.ClassId, myControl.InterfaceId, myControl.EventsId)> _
<DefaultProperty("NewProperty")> _
Public Class myControl
Public Const ClassId As String = "86252de2-ca87-4468-adbe-ad7c47747759"
Public Const InterfaceId As String = "c1cbf1a1-24bb-46c3-88a4-813eb4917845"
Public Const EventsId As String = "954ed890-011c-4908-ab33-610159fe6eb1"
Private newPropertyValue As String
Public Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
End Set
End Property
End Class
DefualtProperty属性はトリックを行いません。
DispIdを手動で設定するここを読んだゼロへのトリックを行う必要があります。しかし、これを行うと:
<DispId(0)> Public Property NewProperty() As String
Visual Basicは、DispId ZeroがDefaultProperty用に予約されていることを親切に知らせてくれます。うん。そんなこと知ってる。それが欲しいです。しかし、どのように?
編集:
Default Public Property NewProperty(ByVal foo As Integer) As String
プロパティがVB6のデフォルトプロパティとして表示されるようになりました。しかし、これは私の問題を解決しません。変更できないコードがあり、次のようなことをするからです:
aStringVariable = myUserControlInstance
このMSDN記事にはいくつかの情報がありますこれについて。
解決
私ができないコードがあるから 変更
その場合、元の.NETクラスの周りにラッパークラスを作成し、VB6が使用するコントロールとしてエクスポートする必要があります。その後、defaultキーワードを使用してデフォルトプロパティをマークできます。
他のヒント
VB6でラッパーを作成して、VB6の既定のプロパティの動作を模倣する以外に方法はありません。私はいくつかの相互運用ユーザーコントロールを作成する必要があり、これがVB6で.Net相互運用コントロールをラップしなければならなかった主な理由でした(多くのコード変更と大規模なテスト作業を避けるため)。
所属していません StackOverflow