• 解决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而浪费在无谓的等待中。

  • 相关阅读:
    centos7 忘记mysql5.7密码
    阿里云Linux(Centos7)下搭建SVN服务器
    JAVA金额格式字符串转数值
    win10下RabbitMQ的安装和配置
    Oracle update 两表及以上关联更新,出现多值情况,不是一对一更新
    java.lang.OutOfMemoryError: java heap space
    bootstrap.min.css.map
    css 边距等常用设置
    html 标签
    数据库总结
  • 原文地址:https://www.cnblogs.com/oiramario/p/3302455.html
Copyright © 2020-2023  润新知