mirror of
https://github.com/ropnop/go-clr
synced 2026-06-08 17:11:59 +00:00
157 lines
4.2 KiB
Go
157 lines
4.2 KiB
Go
// +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
|
|
}
|