QTAgent32.exe在执行后保持DLL的句柄打开

时间:2011-06-02 19:19:59

标签: visual-studio-2010 unit-testing dll c++-cli

我使用Visual Studio 2010的单元测试框架遇到了一些问题。目前,QTAgent32将在测试执行完成后维护对DLL的引用。

有问题的DLL是围绕某些本机c ++代码的c ++ / cli包装器。包装器公开的对象实际上从未由托管代码分配。它唯一的参考是在处理期间进行最后检查,以确定它是否在课堂上的生命期间设置。

If(_obj != null)
{
  _obj.Dispose();
  _obj = null;
}

我知道这是事实,因为如果我单步执行代码并观察调试器控制台输出,我可以看到DLL的符号在点击if之前没有加载(这是有意义的)。所涉及的所有托管对象都实现了IDisposable,以确保所有本机对象都得到谨慎以避免内存泄漏。

基于这个问题:QTAgent32 Holding File Open我确保没有明确打开文件流(包括控制台),甚至没有使用任何文件,但问题仍然存在。我的想法已经不多了。

有人可以帮忙吗?

TL; DR: QTAgent32.exe保持对从未实例化的c ++ / cli包装器的开放引用。

2 个答案:

答案 0 :(得分:11)

我在使用Fortran DLL时遇到了同样的问题。即使DLL函数完全为空,问题仍然存在。

我仍然不知道问题是什么,但一个简单的解决方法是将QTAgent32进程的杀戮指定为项目中的预构建事件。

taskkill /f /im QTAgent32.exe
exit 0

答案 1 :(得分:0)

它可能会在metadata only mode中打开DLL以搜索测试属性。这不会触发符号加载,但可以锁定文件。