C++

2011-05-15 9 views
16

स्ट्रिंग के लिए TCHAR परिवर्तित मैं में के रूप में एक स्ट्रिंग के लिए एक TCHAR कन्वर्ट करने के लिए कोशिश कर रहा हूँ:C++

std::string mypath; 
TCHAR path[MAX_PATH]; 
GetModuleFileName(NULL, path, MAX_PATH); 

मैं path की है कि mypath सेट करना होगा। मैंने एक साधारण लूप किया और path[index] से mypath पर संयोजित किया और यह काम करता है लेकिन मुझे इस तरह से पसंद नहीं है।

मैं सी ++ में नया हूं लेकिन सी # के बहुत सारे किए हैं। मैंने GetModuleFileName के उदाहरण देखे हैं जो "char" में गुजरते हैं लेकिन इसे पसंद नहीं है। इसे TCHAR या LPWSTR की आवश्यकता है।

उत्तर

20

टीसीएचएआर आपके चरित्र सेट को परिभाषित करने के आधार पर एक चार या wchar के रूप में परिभाषित एक मैक्रो है। 2008 के बाद डिफ़ॉल्ट में चरित्र यूनिकोड पर सेट है। यदि आप अपना चरित्र सेट बदलते हैं तो यह कोड काम करता है।

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    TCHAR* bob ="hi"; 
    string s = bob;  
} 

सही परियोजना सेटिंग्स पर क्लिक करें और folowing

enter image description here

chage यदि आप यूनिकोड वर्ण सेट उपयोग wstring

+10

अभी तक बेहतर है, 'tCHAR' पर टाइपिफ़ को परिभाषित करें: 'typedef std :: basic_string tstring;' और हर जगह' tstring' का उपयोग करें। – Pablo

+0

मदद के लिए धन्यवाद। ऊपर दिए गए गुणक सेट को सेट करना। अब मैं GetModuleFileName विधि में टाइप char का उपयोग कर सकता हूं। – David

+0

अब कोई स्वीकार नहीं है। – rerun

8

रूप TCHAR उपयोग करने के लिए आप वर्ण में पथ चाहते हैं चाहते हैं , आपको GetModuleFilenameA पर कॉल करना चाहिए। उस समारोह में के बजाय LPSTR लगता है।

ध्यान दें कि स्ट्रिंग्स लेने या वापस करने वाले लगभग सभी Win32 फ़ंक्शंस में दो संस्करण होते हैं, एक A (एएनएसआई?) में समाप्त होता है और दूसरा W (चौड़ा) में समाप्त होता है।

+1

+1 - नाइटपिक - मैं शायद ':: GetModuleFilenameA' लिखूंगा। –

5

जब मैं वास्तव में यह करने के लिए मैं निम्नलिखित का उपयोग की जरूरत है :

TCHAR infoBuf[32767] 
GetWindowsDirectory(infoBuf, 32767); 
//Let's convert to string... 
wstring test(&infoBuf[0]); //convert to wstring 
string test2(test.begin(), test.end()); //and convert to string. 

आशा है कि मदद करता है ।