Exemple #1
0
//============================================================
// <T>析构脚本工作器。</T>
//
// @return 处理结果
//============================================================
TResult FMonoLibrary::Open(){
   TResult resultCd = FScriptLibrary::Open();
   // 打开资源
   FAssetStream* pStream = RAssetManager::Instance().OpenAssetStreamFormat(_name);
   MO_ERROR_CHECK(pStream, return NULL, "Open template stream failure. (name=%s)", (TCharC*)_name);
   // 加载映像
   MonoImageOpenStatus statusCd = MONO_IMAGE_IMAGE_INVALID;
   _pMonoImage = mono_image_open_from_data_full((TChar*)pStream->MemoryC(), pStream->Length(), true, &statusCd, false);
   MO_FATAL_CHECK(_pMonoImage, return EFailure, "Open assembly image failure. (name=%s)", (TCharC*)_name);
   if(statusCd != MONO_IMAGE_OK){
      MO_FATAL("Open assembly image failure. (file_name=%s)", _name);
      return EFailure;
   }
   // 加载装配数据
   MonoImageOpenStatus assemblyStatusCd = MONO_IMAGE_IMAGE_INVALID;
   MonoAssembly* pAssembly = mono_assembly_load_from_full(_pMonoImage, _name, &assemblyStatusCd, false);
   MO_FATAL_CHECK(pAssembly, return EFailure, "Load assembly failure. (name=%s)", (TCharC*)_name);
   if(mono_assembly_get_image(pAssembly) != _pMonoImage){
      MO_FATAL("Check mono image failure. (image=0x%08X)", _pMonoImage);
      return EFailure;
   }
   // 释放资源
   RAssetManager::Instance().CloseAssetStream(pStream);
   return resultCd;
}
Exemple #2
0
//#####################################################################
// Function loadAssembly
//#####################################################################
bool MonoSystem::loadMemoryAssembly(char* membuf, unsigned int len) const {
    MonoAssembly *ass;
    MonoImageOpenStatus status = MONO_IMAGE_OK;
    MonoImage *image = mono_image_open_from_data_full(membuf, len, TRUE, &status, false);

    if (!image) { // bad image format
        printf("Error loading image from memory: %d\n", status);
        return false;
    }

    ass = mono_assembly_load_from_full (image, "", &status, false);

    if (!ass) {
        printf("Error loading assembly from memory: %d\n", status); // FIXME real error reporting
        // bad image format?
        mono_image_close (image);
        return false;
    }

    return true;
}