Chromium Embedded Framework の CefSharp CLR バインディングを使用して、従来の ActiveX コントロール (WonderWare InTouch HMI) のみをサポートするアプリケーションに埋め込むことができる代替 Web ブラウザー コントロールを作成して、いくつかの HTML5 サポートを取得しようとしています。古い機械。
これまでのところ、Microsoft InteropForms Toolkitを使用して Interop User Control を作成し、CefSharp.WinForms WebView を非常に必要最小限の方法でコントロールに埋め込みました。
Private Sub WebControl_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim Settings = New CefSharp.Settings
If (CEF.Initialize(Settings)) Then
WebView = New WebView(homepage, New BrowserSettings())
WebView.Dock = DockStyle.Fill
End If
Me.Controls.Add(WebView)
End Sub
DLL をビルドするときに、コマンドを使用して登録します。
regasm /tlb /コードベース Cefsharp.WebControl.dll
これはほとんどの場合うまくいくようですが、完全には理解できない問題がいくつかあります。Excel で VBA フォームを使用してテストしています (純粋に利便性のため)。Form Builder を使用している場合、ユーザー フォームに追加されたときにコントロールが実際に初期化され、Web ページが完全に読み込まれます。
ただし、UseForm を表示しようとすると、webview のハンドルまたはインスタンス (またはその両方) が破壊されているように見え、修正方法がわかりません。フォームを表示して、次のようなことを試してみると
Sub Test()
WebForm.Show
WebForm.WebControl.Navigate "www.google.com"
End Sub
オブジェクトが存在しないというエラーが表示されます。少しいじりましたが、ポインターが無効であるなどの別のエラーが発生することもありますが、これまでのところ、適切に設定する方法がわかりません。ユーザー フォーム イベントの処理に問題があると思いますが、よくわかりません。
誰かがこれについて何か洞察を持っているなら、私はそれを大いに感謝します. ありがとう!