調試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而浪費在無謂的等待中。調試