kant2002 / WinFormsComInterop

ComWrappers required to run NativeAOT and WinForms
MIT License
214 stars 30 forks source link

Doesn't work with WebView2 #24

Closed darkguy2008 closed 1 year ago

darkguy2008 commented 2 years ago

Hi! This repo seems really useful to get some WinForms apps working with NativeAOT, however it seems to have some issues with WebView2. Using this repo removed some of the Com Wrappers exceptions but now it has a different one which I think is related to this repo:

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NotImplementedException: The method or operation is not implemented.
   at WinFormsComInterop.WinFormsComWrappers.ComputeVtables(Object, CreateComInterfaceFlags, Int32&) + 0x1af
   at System.Runtime.InteropServices.ComWrappers.CreateCCW(Object, CreateComInterfaceFlags) + 0x39
   at System.Runtime.InteropServices.ComWrappers.<>c__DisplayClass25_0.<GetOrCreateComInterfaceForObject>b__0(Object) + 0x1c
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValueLocked(TKey, ConditionalWeakTable`2.CreateValueCallback) + 0x26
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey, ConditionalWeakTable`2.CreateValueCallback) + 0x3e
   at System.Runtime.InteropServices.ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags) + 0xa8
   at System.Runtime.InteropServices.ComWrappers.ComInterfaceForObject(Object, Guid) + 0xe
   at Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateCoreWebView2EnvironmentWithOptions(String, String, ICoreWebView2EnvironmentOptions, ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler) + 0xd7
   at Microsoft.Web.WebView2.Core.CoreWebView2Environment.<CreateAsync>d__3.MoveNext() + 0xd0
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x20
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0xb9
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x44
   at Renderer.Windows.RuntimeWindow.<<-ctor>b__4_0>d.MoveNext() + 0xdb
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x20
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object) + 0x28
   at Renderer!<BaseAddress>+0xe709af
   at System.InvokeUtils.CallDynamicInvokeMethod(Object, IntPtr, IntPtr, IntPtr, Object, Object[], BinderBundle, Boolean, Boolean) + 0x113

************** Loaded Assemblies **************
System.ComponentModel.TypeConverter
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Diagnostics.DiagnosticSource
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.ObjectModel
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.Uri
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.IO.Compression
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.NetworkInformation
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Windows.Forms.Primitives
    Assembly Version: 6.0.1.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Collections
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Drawing.Common
    Assembly Version: 6.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Design
    Assembly Version: 6.0.1.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
Accessibility
    Assembly Version: 4.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.ComponentModel.EventBasedAsync
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.Security
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.Xml
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
Renderer
    Assembly Version: 1.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.Requests
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Runtime.CompilerServices.Unsafe
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Collections.Specialized
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.ServicePoint
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Windows.Forms.Design
    Assembly Version: 6.0.1.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Linq.Expressions
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Security.Cryptography.Cng
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Runtime.Numerics
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
Microsoft.Web.WebView2.Core
    Assembly Version: 1.0.1072.54
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.Interop
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Drawing.Primitives
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Configuration.ConfigurationManager
    Assembly Version: 6.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Diagnostics.TraceSource
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Security.Cryptography.X509Certificates
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.ComponentModel.Primitives
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Runtime.Serialization.Formatters
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.CoreLib
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Text.RegularExpressions
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Collections.NonGeneric
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.Quic
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Threading
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.IO.Compression.Brotli
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Linq
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
WinFormsComInterop
    Assembly Version: 0.2.9.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Text.Encoding.CodePages
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Security.Cryptography.Csp
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Threading.Channels
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.Sockets
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Diagnostics.Process
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Windows.Forms
    Assembly Version: 6.0.1.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Security.Principal.Windows
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.Http
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
Microsoft.Win32.Registry
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
Microsoft.Win32.SystemEvents
    Assembly Version: 6.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Security.Cryptography
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.Primitives
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Security.Claims
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Windows.Extensions
    Assembly Version: 6.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.Reflection.Execution
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.WebHeaderCollection
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Runtime.InteropServices
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Resources.Writer
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Diagnostics.FileVersionInfo
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.CodeDom
    Assembly Version: 6.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.TypeLoader
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Collections.Concurrent
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.ComponentModel
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Private.Reflection.Core
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.NameResolution
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Net.WebClient
    Assembly Version: 7.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: n/a
    CodeBase: 
----------------------------------------
Microsoft.Web.WebView2.WinForms
    Assembly Version: 1.0.1072.54
    Win32 Version: n/a
    CodeBase: 
----------------------------------------

************** JIT Debugging **************

Could this be solved in the near future? Otherwise, is there a way to prod MS into giving NativeAOT more love/attention? It's very discouraging to spend time developing an app just to see it disassembled in a couple seconds with ILSpy. At least native code provides a layer of protection where you'd need to know assembler, and it's harder (but not impossible, I know) to alter.

Thanks!

kant2002 commented 1 year ago

Implemented in 0.4.0, if some interfaces are missing, please report an issue. Sample how to use Blazor is inside samples folder.