• 解决Visual Studio 2010/2012在调试时lock文件的方法


    调试3dsmax插件,有一个避免每次修改插件代码都需要重启3dsmax的方法,就是将导出的核心代码写在一个独立的DLL中,然后在插件代码需要导出时LoadLibrary这个DLL,导出之后再FreeLibrary。这样的好处是,通过同时开启2个vs,一个是插件,另一个是DLL,当需要修改代码时,只需要重新编译DLL即可,除非有致命错误导致3dsmax崩溃。

    但是从Visual Studio 2010起,VS会一直lock住相关文件,例如pdb之类的。这样将导致DLL代码在重新编译时,会出现LNK1201错误,从而无法更新DLL的pdb文件。我花了好几个小时,终于找到一个解决办法,为了让后来者不再浪费时间,下面将说明实现方法。

    打开DLL的工程,在Pre-Build Event中加入以下代码:

    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%来确保改名操作成功。

    最后,我们又回到了过去那段快乐的时光,有限的生命终于不再因为无数次重启3dsmax而浪费在无谓的等待中。

  • 相关阅读:
    Redis持久化
    Redis数据淘汰策略
    Redis事务
    Redis发布订阅
    WPS生成多级编号
    VMware 网络介绍
    3、Linux目录操作
    2、Shell命令学习笔记
    2、线程的状态和调度学习笔记
    1、Linux安装前的准备
  • 原文地址:https://www.cnblogs.com/oiramario/p/3302455.html
Copyright © 2020-2023  润新知