में std :: wstring पास करने में असमर्थ मैंने मौजूदा एमएफसी डीएलएल के खिलाफ यूनिट परीक्षण लिखने के लिए विजुअल स्टूडियो 2010 में एक प्रोजेक्ट स्थापित किया है। मैं एक सिंगल-हेडर यूनिट टेस्ट फ्रेमवर्क का उपयोग कर रहा हूं, और यूनिट टेस्ट प्रोजेक्ट से एमएफसी डीएलएल के लिब रैपर से जुड़ा हुआ हूं। मैं एक वर्ग बनाने की कोशिश कर रहा हूं जो इसके निर्माता में std::wstring
लेता है।डीएलएल
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);
}
कहाँ Foobar
कक्षा की परीक्षा के तहत MFC DLL से निर्यात किया है: यहाँ क्या अपने परीक्षण लग रहा है की तरह है। हालांकि, परीक्षण ढांचा एक अप्रत्याशित अपवाद की रिपोर्ट करता है। Foobar
के कन्स्ट्रक्टर को स्ट्रिंग की प्रतिलिपि करते समय मैंने इसे std::wstring
की कॉपी कन्स्ट्रक्टर तक ट्रैक किया। एमएसवीसी डीबगर स्रोत स्ट्रिंग को <Bad Ptr>
के रूप में रिपोर्ट करता है।
मैंने एक डमी कन्स्ट्रक्टर, Foobar::Foobar(long num, IDbService& db)
बनाया और सभी मान (IDbService&
समेत) ठीक ठीक हो गए।
दोनों एमएफसी डीएलएल और मेरी यूनिट टेस्ट EXE एक संपत्ति शीट साझा कर रहे हैं जो कंपाइलर झंडे को बराबर रखना चाहिए। मैं डीबग मोड में परीक्षण और परीक्षण कर रहा हूं। कोई विचार क्यों std::wstring
डीएलएल भर में कॉपी नहीं कर सकता है?
क्या आप सीआरटी के डीबग संस्करण के साथ EXE और DLL दोनों को गतिशील रूप से जोड़ रहे हैं? ('/ MDd') –
@ श्री सी 64 वाह, वह था। मेरा यूनिट टेस्ट प्रोजेक्ट '/ MD' का उपयोग कर रहा था और एमएफसी डीएलएल'/MDd' था। मुझे एक उत्तर के रूप में एक संक्षिप्त स्पष्टीकरण पसंद आएगा ताकि मैं इसे समझ सकूं; और मैं इसे स्वीकार करूंगा। धन्यवाद! –
मैंने एक संक्षिप्त स्पष्टीकरण जोड़ा। असल में, मुझे लगता है कि आपके मामले में समस्या यह है कि डीबग-बिल्ड के 'std :: wstring' के रिलीज-बिल्ड की' std :: wstring' की तुलना में एक अलग कार्यान्वयन है। –