调试3dsmax插件,有一个避免每次修改插件代码都须要重启3dsmax的方法,就是将导出的核心代码写在一个独立的DLL中,而后在插件代码须要导出时LoadLibrary这个DLL,导出以后再FreeLibrary。这样的好处是,经过同时开启2个vs,一个是插件,另外一个是DLL,当须要修改代码时,只须要从新编译DLL便可,除非有致命错误致使3dsmax崩溃。dom
可是从Visual Studio 2010起,VS会一直lock住相关文件,例如pdb之类的。这样将致使DLL代码在从新编译时,会出现LNK1201错误,从而没法更新DLL的pdb文件。我花了好几个小时,终于找到一个解决办法,为了让后来者再也不浪费时间,下面将说明实现方法。ui
打开DLL的工程,在Pre-Build Event中加入如下代码:spa
del "$(OutDir)$(TargetName).pdb.locked.*" /q if exist "$(OutDir)$(TargetName).pdb" move "$(OutDir)$(TargetName).pdb" "$(OutDir)$(TargetName).pdb.locked.%random%"
先跳过第一句,第二句的意思是,判断是否存在工程对应的pdf文件,若是存在,则将其重命名为"*.locked.随机数",由于只是move,因此并不影响VS的lock状态,这时从新生成pdb的操做也将成功。再回头看第一句,每次编译前,都将尝试删除全部"临时更名后的文件",打扫战场。插件
由于在插件运行的时段,DLL会有屡次须要修改,因此每次都须要将工程的pdf文件改名为不一样的新名称,因此经过%random%来确保更名操做成功。3d
最后,咱们又回到了过去那段快乐的时光,有限的生命终于再也不由于无数次重启3dsmax而浪费在无谓的等待中。调试