मैं सी # में this जैसे कुछ करने की कोशिश कर रहा हूं। मुझे पता चला कि P/Invoke from this link का उपयोग कर सी # से Win32 विधियों को कैसे कॉल करें। हालांकि मैं पी/Invoke लागू करने में कुछ कठिनाइयों से मुलाकात की।पी/Invoke का उपयोग करते समय Win32 प्रकार से C# प्रकारों को कैसे मानचित्र करें?
उदाहरण के लिए, तरीकों कि मैं का उपयोग करना चाहते हैं में से एक, PdhOpenQuery है हस्ताक्षर:
PDH_STATUS PdhOpenQuery(
__in LPCTSTR szDataSource,
__in DWORD_PTR dwUserData,
__out PDH_HQUERY *phQuery
);
मैं समझ इसी सी # घोषणा इस
[DllImport("Pdh.dll")]
static extern PDH_STATUS PdhOpenQuery(LPCTSTR szDataSource,
DWORD_PTR dwUserData, out PDH_HQUERY *phQuery);
मेरे सवालों की तरह कुछ किया जाना चाहिए :
एलपीसीटीआरटी क्या है, और सी # में किस डेटा प्रकार का मानचित्र है?
एक सूचक प्रकार DWORD_PTR कैसे मानचित्र करें? पिनवोक आलेख बताता है कि DWORD नक्शे UInt32 पर है, लेकिन पॉइंटर्स के बारे में कैसे?
मुझे लगता है कि पीडीएच_STATUS और PDH_HQUERY पुस्तकालय के लिए विशिष्ट संरचना हैं (मुझे अभी तक यकीन नहीं है)। मैं इन्हें कैसे मैप करूं?
सही विधि घोषणा क्या है, और आप इसे सही तरीके से कैसे कॉल करते हैं?
सुधार: 'UIntPtr'' UIntPtr dwUserData' होना चाहिए? एक और सवाल, एक विधि को कैसे कॉल करना चाहिए? –
क्या वैसे भी एलपीसीटीआरटी इंटप्राट पर मैप कर सकता है? SHGetFileInfo API (ref: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762179%28v=vs.85%29.aspx) "_In_ LPCTSTR pszPath" का पहला param है, और सबसे अधिक जब तक मैं इसे "स्ट्रिंग" के रूप में उपयोग करने वाले लोगों को देखता हूं। लेकिन एक उदाहरण में मैंने पाया कि मुझे लगता है कि किसी ने इसे इंटिप्टर के रूप में इस्तेमाल किया है ..? (रेफरी: http://stackoverflow.com/a/14293350/1039753) –
@ArvoBowen: हां, आप पैरामीटर को 'IntPtr' के रूप में घोषित कर सकते हैं और फिर' सिस्टम में 'PtrToStringAnsi' या' PtrToStringUni' फ़ंक्शंस 'का उपयोग कर सकते हैं। रनटाइम .teropServices.Marshal' वर्ग स्ट्रिंग के लिए। – dan04