mono::object CScriptClass::CreateInstance(IMonoArray *pConstructorParams) { CScriptDomain *pDomain = static_cast<CScriptDomain *>(GetAssembly()->GetDomain()); MonoObject *pInstance = mono_object_new(pDomain->GetMonoDomain(), (MonoClass *)m_pObject); if(pConstructorParams) InvokeArray((mono::object)pInstance, ".ctor", pConstructorParams); else mono_runtime_object_init(m_pObject); return (mono::object)pInstance; }
mono::object CScriptClass::GetFieldValue(mono::object object, const char *fieldName, bool throwOnFail) { MonoClassField *pField = GetMonoField(fieldName); if(pField) { CScriptDomain *pDomain = static_cast<CScriptDomain *>(GetAssembly()->GetDomain()); MonoObject *fieldValue = mono_field_get_value_object(pDomain->GetMonoDomain(), pField, (MonoObject *)object); if(fieldValue) return (mono::object)fieldValue; } else if(throwOnFail) GetMonoScriptSystem()->GetCorlibAssembly()->GetException("System", "MissingFieldException", "Failed to locate field %s in class %s", fieldName, GetName())->Throw(); return nullptr; }
void CDynScriptArray::InsertNativePointer(void *ptr, int index) { CScriptDomain *pDomain = static_cast<CScriptDomain *>(GetClass()->GetAssembly()->GetDomain()); Insert((mono::object)mono_value_box(pDomain->GetMonoDomain(), mono_get_intptr_class(), ptr), index); }