देता है मैं कुछ सी # कोड लिखने की कोशिश कर रहा हूं जो एक अप्रबंधित DLL से एक विधि को कॉल करता है। dll में समारोह के लिए प्रोटोटाइप है:सी फ़ंक्शन के लिए PInvoke जो char *
extern "C" __declspec(dllexport) char *foo(void);
सी # में, मैं पहली बार प्रयोग किया है:
[DllImport(_dllLocation)]
public static extern string foo();
यह सतह पर काम करने के लिए लगता है, लेकिन मैं रनटाइम के दौरान स्मृति भ्रष्टाचार त्रुटियों हो रही है। मुझे लगता है कि मैं स्मृति को इंगित कर रहा हूं जो सही होता है, लेकिन पहले से ही मुक्त हो चुका है।
मैंने "पी/इनवोक इंटरऑप सहायक" नामक एक पीएनवोक कोड जेन उपयोगिता का उपयोग करने का प्रयास किया। इसने मुझे आउटपुट दिया:
[System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")]
public static extern System.IntPtr foo();
क्या यह सही है? यदि हां, तो मैं इस IntPtr को C# में स्ट्रिंग में कैसे परिवर्तित करूं?
यह मेरे लिए काम किया। मुझे केवल एक ही परिवर्तन 'PtrToStringAuto'' PtrToStringAnsi 'करना था अन्यथा मुझे कुछ चीनी वर्ण मिल गए – 3vts