// +build windows package clr import ( "syscall" "unsafe" "golang.org/x/sys/windows" ) type AppDomain struct { vtbl *AppDomainVtbl } type AppDomainVtbl struct { QueryInterface uintptr AddRef uintptr Release uintptr GetTypeInfoCount uintptr GetTypeInfo uintptr GetIDsOfNames uintptr Invoke uintptr get_ToString uintptr Equals uintptr GetHashCode uintptr GetType uintptr InitializeLifetimeService uintptr GetLifetimeService uintptr get_Evidence uintptr add_DomainUnload uintptr remove_DomainUnload uintptr add_AssemblyLoad uintptr remove_AssemblyLoad uintptr add_ProcessExit uintptr remove_ProcessExit uintptr add_TypeResolve uintptr remove_TypeResolve uintptr add_ResourceResolve uintptr remove_ResourceResolve uintptr add_AssemblyResolve uintptr remove_AssemblyResolve uintptr add_UnhandledException uintptr remove_UnhandledException uintptr DefineDynamicAssembly uintptr DefineDynamicAssembly_2 uintptr DefineDynamicAssembly_3 uintptr DefineDynamicAssembly_4 uintptr DefineDynamicAssembly_5 uintptr DefineDynamicAssembly_6 uintptr DefineDynamicAssembly_7 uintptr DefineDynamicAssembly_8 uintptr DefineDynamicAssembly_9 uintptr CreateInstance uintptr CreateInstanceFrom uintptr CreateInstance_2 uintptr CreateInstanceFrom_2 uintptr CreateInstance_3 uintptr CreateInstanceFrom_3 uintptr Load uintptr Load_2 uintptr Load_3 uintptr Load_4 uintptr Load_5 uintptr Load_6 uintptr Load_7 uintptr ExecuteAssembly uintptr ExecuteAssembly_2 uintptr ExecuteAssembly_3 uintptr get_FriendlyName uintptr get_BaseDirectory uintptr get_RelativeSearchPath uintptr get_ShadowCopyFiles uintptr GetAssemblies uintptr AppendPrivatePath uintptr ClearPrivatePath uintptr SetShadowCopyPath uintptr ClearShadowCopyPath uintptr SetCachePath uintptr SetData uintptr GetData uintptr SetAppDomainPolicy uintptr SetThreadPrincipal uintptr SetPrincipalPolicy uintptr DoCallBack uintptr get_DynamicDirectory uintptr } // GetAppDomain is a wrapper function that returns an appDomain from an existing ICORRuntimeHost object func GetAppDomain(runtimeHost *ICORRuntimeHost) (appDomain *AppDomain, err error) { var pAppDomain uintptr var pIUnknown uintptr hr := runtimeHost.GetDefaultDomain(&pIUnknown) err = checkOK(hr, "runtimeHost.GetDefaultDomain") if err != nil { return } iu := NewIUnknownFromPtr(pIUnknown) hr = iu.QueryInterface(&IID_AppDomain, &pAppDomain) err = checkOK(hr, "IUnknown.QueryInterface") return NewAppDomainFromPtr(pAppDomain), err } func NewAppDomainFromPtr(ppv uintptr) *AppDomain { return (*AppDomain)(unsafe.Pointer(ppv)) } func (obj *AppDomain) QueryInterface(riid *windows.GUID, ppvObject *uintptr) uintptr { ret, _, _ := syscall.Syscall( obj.vtbl.QueryInterface, 3, uintptr(unsafe.Pointer(obj)), uintptr(unsafe.Pointer(riid)), uintptr(unsafe.Pointer(ppvObject))) return ret } func (obj *AppDomain) AddRef() uintptr { ret, _, _ := syscall.Syscall( obj.vtbl.AddRef, 1, uintptr(unsafe.Pointer(obj)), 0, 0) return ret } func (obj *AppDomain) Release() uintptr { ret, _, _ := syscall.Syscall( obj.vtbl.Release, 1, uintptr(unsafe.Pointer(obj)), 0, 0) return ret } func (obj *AppDomain) GetHashCode() uintptr { ret, _, _ := syscall.Syscall( obj.vtbl.GetHashCode, 2, uintptr(unsafe.Pointer(obj)), 0, 0) return ret } func (obj *AppDomain) Load_3(pRawAssembly uintptr, asmbly *uintptr) uintptr { ret, _, _ := syscall.Syscall( obj.vtbl.Load_3, 3, uintptr(unsafe.Pointer(obj)), uintptr(unsafe.Pointer(pRawAssembly)), uintptr(unsafe.Pointer(asmbly))) return ret }