私はInteropユーザーコントロール(VB.NET)を呼び出して、get/set呼び出しから複数の値を受け入れたいと考えています。私はユーザー定義型(UDT)を想定していましたが、正しい方法ですが、VB6コンパイルの「変数はVisual Basicでサポートされていないオートメーションタイプを使用しています。 InteropコントロールとVB6アプリケーション間で複数の値を渡す方法は?Interop呼び出しから複数の結果(UDT?)を返す - VB6 <--> VB.NET
VB.NET(相互運用)コード、.NETのListViewコントロール
Structure Employee
Dim Firstname As String
Dim Lastname As String
End Structure
と制御...
Public Property MyReadListViewData() As Employee
Get
Dim myEmployee As Employee
myEmployee.Lastname = ListView1.SelectedItems(0).Text
Return myEmployee
End Get
Set(ByVal value As Employee)
Me.ListView1.SelectedItems(0).Text = value.Lastname
End Set
End Property
典型的なVB6コード:
Private Sub Command4_Click()
Dim myEmployee As Employee
myEmployee = MyToolStrip1.MyReadListViewData
Text3.Text = myEmployee.Lastname
End Sub
あなたはそれを使用可能にする構造定義に属性を適用する必要があります。あるいは、構造ではなくクラスを試してみましたか? – MarkJ
構造体はCOMの問題です。非常にコンパイラ/ハードウェアに依存したレイアウトです。 IRecordInfoインターフェイスではほとんどサポートされていません。通常、タイプライブラリで構造体を宣言する必要があります。注目すべき点は、公開UDTを扱うように頼まれたときにVB6ビルドシステムがかなりボルケーであることです。 Employeeを代わりに[ComVisible]インターフェース+クラスとして宣言するだけで、この種の問題を回避できます。 –
これをデモするためのコードをいくつか用意してください。 – ForEachLoop