MaxSDK中卸载插件的方法
2011-08-24 17:34
176 查看
autodesk在Max2012SDK文档中否决了卸载插件这一行为,认为他不够安全,容易导致软件崩溃,确实,如果已经存在依赖关系,然后卸载了这个库,会导致问题。不过这里只是自娱自乐的探索:)。下面的代码是写了一个MaxScript的函数来实现卸载插件以及列出当前插件的文件名。
需要说明一下的是 14000 是定义在pluginapi.h中的一个宏 MAX_RELEASE_R14 的值,也就是Max2012版本的版本号。
MaxSDK卸载DLL
需要说明一下的是 14000 是定义在pluginapi.h中的一个宏 MAX_RELEASE_R14 的值,也就是Max2012版本的版本号。
MaxSDK卸载DLL
def_visible_primitive(UnLoadPlugin, "UnLoadPlugin"); #if MAX_RELEASE < 14000 Value* UnLoadPlugin_cf(Value** arg_list, int count) { check_arg_count("UnLoadPlugin", 1, count); TSTR inputDllName(arg_list[0]->to_string()); inputDllName.toUpper(); DllDir * theDllDir; theDllDir = GetCOREInterface()->GetDllDirectory(); Value * result = &false_value; for (int i = 0; i < theDllDir->Count(); ++i) { DllDesc * dll_desc = &(*theDllDir)[i]; if (dll_desc->loaded == true) { TSTR currentDllName = dll_desc->fname; currentDllName.toUpper(); if (currentDllName == inputDllName) { for (int i = 0; i < dll_desc->NumberOfClasses(); ++i) { ClassDesc *class_desc = (*dll_desc)[i]; GetCOREInterface()->DeleteClass(class_desc); } dll_desc->Free(); dll_desc->loaded = false; result = &true_value; } } } return result; } #else Value* UnLoadPlugin_cf(Value** arg_list, int count) { check_arg_count("UnLoadPlugin", 1, count); TSTR inputDllName(arg_list[0]->to_string()); inputDllName.toUpper(); DllDir * theDllDir; theDllDir = GetCOREInterface()->GetDllDirectory(); Value * result = &false_value; for (int i = 0; i < theDllDir->Count(); ++i) { const DllDesc * dll_desc(&(*theDllDir)[i]); if (dll_desc->IsLoaded() == true) { TSTR currentDllName = dll_desc->GetFileName(); currentDllName.toUpper(); if (currentDllName == inputDllName && dll_desc->GetHandle() != 0) { for (int i = 0; i < dll_desc->NumberOfClasses(); ++i) { ClassDesc * class_desc = (*dll_desc)[i]; GetCOREInterface()->DeleteClass(class_desc); } result = &true_value; FreeLibrary(dll_desc->GetHandle()); } } } return result; } #endif def_visible_primitive(GetPluginList, "GetPluginList"); #if MAX_RELEASE < 14000 Value* GetPluginList_cf(Value** arg_list, int count) { check_arg_count("GetPluginList",0, count); one_typed_value_local(Array* rArray); vl.rArray = new Array (0); DllDir * theDllDir; theDllDir = GetCOREInterface()->GetDllDirectory(); for (int i = 0; i < theDllDir->Count(); ++i) { DllDesc dll_desc = (*theDllDir)[i]; if (dll_desc.loaded ) { Value * tempName = new String(dll_desc.fname); vl.rArray->append(tempName); } } return_value(vl.rArray); } #else Value* GetPluginList_cf(Value** arg_list, int count) { check_arg_count("GetPluginList",0, count); one_typed_value_local(Array* rArray); vl.rArray = new Array (0); DllDir * theDllDir; theDllDir = GetCOREInterface()->GetDllDirectory(); for (int i = 0; i < theDllDir->Count(); ++i) { const DllDesc * dll_desc(&(*theDllDir)[i]); if (dll_desc->IsLoaded() == true) { Value * tempName = new String(dll_desc->GetFileName()); vl.rArray->append(tempName); } } return_value(vl.rArray); } #endif
相关文章推荐
- 卸载百度插件的方法
- 卸载百度插件的方法
- 图解卸载eclipse插件的标准方法
- MyEclipse6.5安装与卸载SVN插件方法
- MyEclipse6.5安装与卸载SVN插件方法
- 网址极限IE网址插件卸载方法
- MyEclipse6.5安装/卸载SVN插件方法
- Eclipse 插件安装、升级和卸载的方法
- eclipse 中卸载插件的方法
- Eclipse安装插件的几种方法 与 Eclipse 卸载插件
- 卸载中国联通网络测速插件的方法
- MyEclipse6.5安装/卸载SVN插件方法
- Eclipse 插件安装、升级和卸载的方法
- MyEclipse6.5安装/卸载SVN插件方法
- Macromedia官方提供的卸载Flash插件的方法
- Eclipse 插件安装、升级和卸载的方法
- 珍爱生命 谨慎下载Chrome插件Bookmark Manager ,附Bookmark Manager卸载方法
- Eclipse 插件安装、升级和卸载的方法
- .net 已安装的插件卸载方法
- MyEclipse6.5安装/卸载SVN插件方法 .