मैं System::String ^
से LPCWSTR
को कनवर्ट करना चाहता हूं।'सिस्टम :: स्ट्रिंग ^' से 'एलपीसीडब्लूस्ट्र'
FindFirstFile(LPCWSTR,WIN32_FIND_DATA);
कृपया मदद के लिए
।
मैं System::String ^
से LPCWSTR
को कनवर्ट करना चाहता हूं।'सिस्टम :: स्ट्रिंग ^' से 'एलपीसीडब्लूस्ट्र'
FindFirstFile(LPCWSTR,WIN32_FIND_DATA);
कृपया मदद के लिए
।
आपको पी/आमंत्रण का उपयोग करने की आवश्यकता है। इस लिंक की जाँच करें: 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 का भी उपयोग कर सकते हैं, जो एक सुविधा है जो केवल सी ++ का समर्थन करती है (सी # और वीबी.नेट के विपरीत)। यह लेख कई उदाहरण दिखाता है:
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);
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);
}
मैं ने पाया है कि
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);
एक आकर्षण की तरह काम कर रहा है और कम से कम वर्बोज़ विधि प्रतीत होता है।
आप किस भाषा का उपयोग कर रहे हैं? वीसी ++ का उपयोग कर – heavyd
मीटर .. बस कोड ट्रैक खो गया है, इसलिए .. उत्तरों का उपयोग करने के लिए समय चाहिए। – Rick2047