2011-06-02 13 views
11

Visual Studio 2010'un birim sınama çerçevesi kullanılarak biraz sorun yaşadım. Şu anda QTAgent32, bir testin yürütülmesi bittikten sonra DLL'ye bir referans gösterecektir.QTAgent32.exe, yürütme sonrasında bir DLL tanıtıcısını açık tutar

Söz konusu DLL, bazı yerel C++ kodları etrafında bir C++/cli sarmalayıcıdır. Sarmalayıcı tarafından maruz kalan nesne aslında yönetilen kod tarafından hiçbir zaman atanmaz. Yaptığı tek referans, sınıfın hayat süresi boyunca ayarlanıp ayarlanmadığını görmek için elden çıkarma sırasında son bir kontroldür. i kod adım ve ayıklayıcı konsol çıktısını izlemek eğer (ki mantıklı) eğer isabet kadar yüklenmez DLL sembollerini görebilirsiniz beri

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

Ben gerçeği biliyorum. İlgili tüm yönetilen nesneler, tüm yerel nesnelerin bellek sızıntılarını önlemek için özen gösterildiğinden emin olmak için kullanılamaz.

Bu soruya dayanarak: QTAgent32 Holding File Open Hiçbir filestrenin açıkça (Console dahil) açılmamasını ve hiçbir dosyanın kullanılmadığından emin oldum, ancak sorun hala devam ediyor. Ne yapacağım konusunda fikirlerim tükeniyor.

Herkes yardımcı olabilir mi?

TL; DR: QTAgent32.exe, hiçbir zaman başlatılmayan bir C++/cli sarmalayıcıya açık bir başvuruda bulunur.

cevap

0

Test özniteliklerini aramak için muhtemelen DLL'yi metadata only mode içinde açar. Bu sembol yüklemesini tetiklemez, ancak dosyayı kilitleyebilir.

11

Bir Fortran DLL kullanırken aynı soruna rastladım. DLL işlevi tamamen boş olsa bile sorun devam etti.

Sorunun ne olduğunu hala bilmiyorum, ancak kolay bir çözüm, QTAgent32 işleminin projenizde önceden oluşturulmuş bir olay olarak öldürülmesini belirtmektir.

taskkill /f /im QTAgent32.exe 
exit 0 
+1

Önceden oluşturulmuş fikir aslında çok güzel. Bundan sonra kullanmak zorunda kalabilirim. Teşekkürler. – JMcCarty

+1

qtagent32 çalışmadığı zaman bir hatadan kaçınmak için aşağıdaki satırı 0 çıkışından ekleyin. – Christian

+0

@Christian Yardımcı olmadı, qtagent32 çalışmıyorken 'exit 0' ile bile hata alıyorum. Ne işe yarıyor, bu komutu yerine kullanıyor: 'start görevkill/f/im QTAgent32.exe' – theV0ID

İlgili konular