2009-06-30 9 views
10

मैं System::String ^ से LPCWSTR को कनवर्ट करना चाहता हूं।'सिस्टम :: स्ट्रिंग ^' से 'एलपीसीडब्लूस्ट्र'

FindFirstFile(LPCWSTR,WIN32_FIND_DATA); 

कृपया मदद के लिए

+0

आप किस भाषा का उपयोग कर रहे हैं? वीसी ++ का उपयोग कर – heavyd

+0

मीटर .. बस कोड ट्रैक खो गया है, इसलिए .. उत्तरों का उपयोग करने के लिए समय चाहिए। – Rick2047

उत्तर

2

आपको पी/आमंत्रण का उपयोग करने की आवश्यकता है। इस लिंक की जाँच करें: http://www.pinvoke.net/default.aspx/kernel32/FindFirstFile.html

सीधे शब्दों में DllImport देशी समारोह हस्ताक्षर जोड़ने:

[DllImport("kernel32.dll", CharSet=CharSet.Auto)] 
static extern IntPtr FindFirstFile 
    (string lpFileName, out WIN32_FIND_DATA lpFindFileData); 

और CLR देशी प्रकार स्वचालित रूप से प्रमुखता करने में कामयाब हो सकें।

[संपादित करें] मुझे अभी एहसास हुआ कि आप सी ++/सीएलआई का उपयोग कर रहे हैं। उस स्थिति में, आप implicit P/Invoke का भी उपयोग कर सकते हैं, जो एक सुविधा है जो केवल सी ++ का समर्थन करती है (सी # और वीबी.नेट के विपरीत)। यह लेख कई उदाहरण दिखाता है:

How to: Convert Between Various String Types in C++/CLI

10

C++/CLI में एक सिस्टम :: स्ट्रिंग OT LPCWSTR परिवर्तित करने के लिए आप आप अप्रबंधित तार तार करने में कामयाब रहे कन्वर्ट करने के लिए Marshal::StringToHGlobalAnsi फ़ंक्शन का उपयोग कर सकते हैं।

System::String ^str = "Hello World"; 

IntPtr ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str); 

HANDLE hFind = FindFirstFile((LPCSTR)ptr.ToPointer(), data); 

System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr); 
23

C++/CLI में ऐसा करने का सबसे आसान तरीका है pin_ptr उपयोग करने के लिए है:

#include <vcclr.h> 

void CallFindFirstFile(System::String^ s) 
{ 
    WIN32_FIND_DATA data; 
    pin_ptr<const wchar_t> wname = PtrToStringChars(s); 
    FindFirstFile(wname, &data); 
} 
0

मैं ने पाया है कि

String^ str = "C:\\my.dll"; 

::LoadLibraryEx(LPCWSTR)Marshal::StringToHGlobalAnsi(str).ToPointer(), 0, flags); 

काम नहीं करता कोड 87. लौटने इसके बजाय,

#include <atlstr.h> 

CString s("C:\\my.dll"); 
::LoadLibraryEx((LPCWSTR)s, 0, flags); 

एक आकर्षण की तरह काम कर रहा है और कम से कम वर्बोज़ विधि प्रतीत होता है।

संबंधित मुद्दे