arası geçiş yapılamıyor Visual Studio 2010'da, bir birim MFC DLL karşı birim sınamaları yazmak için bir proje oluşturdum. Tek başlık birimi sınama çerçevesi kullanıyorum ve birim sınama projesinden MFC DLL's lib wrapper'a bağlıyım. Kurucusunda std::wstring
alan bir sınıf oluşturmaya çalışıyorum.Std :: wstring DLL
Foobar
TEST_CASE("MyProject/MyTest", "Do the test.")
{
MockDbService mockDbService;
Foobar foo(L"{F00DFACE-FEED-DEAD-BEEF-C0FFEEDECADE}", mockDbService);
foo.loadObject();
REQUIRE(mockDbService.getMethodInvokeCount("query()") >= 1);
}
test altında MFC DLL ihraç sınıftır: İşte benim test böyle görünüyor. Ancak, test çerçevesi beklenmedik bir istisna bildiriyor. Dizeyi Foobar
yapıcısına kopyalarken std::wstring
'un kopya yapıcısını izledim. MSVC hata ayıklayıcı, kaynak dizeyi <Bad Ptr>
olarak bildirir.
Bir dummy oluşturucu, Foobar::Foobar(long num, IDbService& db)
oluşturdum ve tüm değerler (IDbService&
dahil) gayet iyi bir şekilde karşımıza çıkıyor.
Hem MFC DLL hem de birim sınama EXE, derleyici bayraklarını eşdeğer tutması gereken bir özellik sayfası paylaşıyor. Testi hata ayıklama modunda yapıyorum ve çalıştırıyorum. std::wstring
neden DLL'de kopyalanamaz herhangi bir fikir?
Hem EXE'yi hem de DLL'yi CRT'nin hata ayıklama sürümü ile dinamik olarak bağlıyor musunuz? ('/ MDd') –
@ Mr.C64 Vay, işte buydu. Ünite test projemde '/ MD' kullanıldı ve MFC DLL'/MDd' idi. Bir cevap olarak kısa bir açıklama yapmayı çok isterim; ve kabul edeceğim. Teşekkürler! –
Kısa bir açıklama ekledim. Temel olarak, sizin durumunuzdaki sorunun debug-build'in std :: wstring'inin sürüm-build'in std :: wstring'den farklı bir uygulaması olduğunu düşünüyorum. –