相互運用性を介していくつかのテストを実行するためにActiveX dll
、古い (まだ維持されている) VB6
exe project
(*) ソースからビルドしようとしているときに、これに遭遇しました。COM / NET
(望ましい)ユースケースは次のとおりです。
VB6
一部のコントロール(たとえばCommonDialog
)参照を取得または返すパブリックメソッドを持つクラスを取得します- このクラスを ActiveX dll にコンパイルします
- .NET から COM 相互運用機能を介してこのクラスのインスタンスを作成し、そのメソッドを正しく呼び出す
要するに、最初の問題は、
Public Function bad_dlg() As CommonDialog
Set bad_dlg = Nothing
End Function
を Visual Basic 6ActiveX dll
のクラス ファイルに追加すると、コンパイル (* *) が次のエラーで失敗します。
「プライベート オブジェクト モジュールは、パブリック オブジェクト モジュールで、パブリック プロシージャのパラメーターまたは戻り値の型、パブリック データ メンバー、またはパブリック ユーザー定義型のフィールドとして使用することはできません」
したがって、質問は次のとおりです。
- 上記のようなものを正しくコンパイルして実行することは本当に不可能ですか?
- [IF NOT]
VB6
Object
タイプのインスタンスを返し、受け取るようにすべてを変更するとします。.Net からそのようなインスタンスを操作するにはどうすればよいですか (特定のメソッドを呼び出すなど)。
(*) -- ではなくActiveX exe
、単なる「通常の」もの
(* *) 適切な.ocx
(「Microsoft Common Dialog Control 6.0 (SP6)」、C:\Windows\system32\ComDlg32.OCX) が参照されている場合
(* * *) 私が見つけたのはPassing control Ref to dllだけです