मैं सी # से निम्नलिखित तुच्छ सी फ़ंक्शन को कॉल करने का प्रयास कर रहा हूँ:रिलीज बिल्ड में मैं सी ++ से सी # तक एक char * स्ट्रिंग क्यों नहीं लौटा सकता?
SIMPLEDLL_API const char* ReturnString()
{
return "Returning a static string!";
}
निम्नलिखित पी के साथ
/घोषणा आह्वान (के साथ या वापसी विशेषता बिना, यह कोई फर्क नहीं पड़ता):
[DllImport("SimpleDll")]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string ReturnString();
यह काम करता है अगर डीएलएल एक डीबग बिल्ड है लेकिन रिलीज बिल्ड (AccessViolationException) में दुर्घटनाग्रस्त हो जाता है।
मैं एक दर्जन से अधिक अन्य साधारण कार्यों पर बोल रहा हूँ और यह केवल एक ही है कि विफल रहता है (यहाँ है दूसरों :)
[DllImport("SimpleDll")] public static extern int NextInt();
[DllImport("SimpleDll")] public static extern void SetNextInt(int x);
[DllImport("SimpleDll")] public static extern int AddInts(int a, int b);
[DllImport("SimpleDll")] public static extern int AddFourInts(int a, int b, int c, int d);
[DllImport("SimpleDll")] public static extern double AddDoubles(double x, double y);
[DllImport("SimpleDll")] public static extern IntPtr AddDoublesIndirect(ref double x, ref double y);
[DllImport("SimpleDll")] [return: MarshalAs(UnmanagedType.U1)]
public static extern char CharStringArgument([MarshalAs(UnmanagedType.LPStr)]string s);
[DllImport("SimpleDll")] [return: MarshalAs(UnmanagedType.U2)]
public static extern char WCharStringArgument([MarshalAs(UnmanagedType.LPWStr)]string s);
[DllImport("SimpleDll")] [return: MarshalAs(UnmanagedType.LPWStr)]
public static extern string ReturnWString();
[DllImport("SimpleDll")] [return: MarshalAs(UnmanagedType.BStr)]
public static extern string ReturnBSTR();
[DllImport("SimpleDll")] public static extern System.Drawing.Point MakePoint(int x, int y);
[DllImport("SimpleDll")] public static extern IntPtr MakePointIndirect(int x, int y);
[DllImport("SimpleDll")] public static extern int GetPointY(System.Drawing.Point p);
[DllImport("SimpleDll")] public static extern int GetPointYIndirect(ref System.Drawing.Point pp);
[DllImport("SimpleDll")] public static extern int SumIntegers(ref int firstElem, int size);
कैसे आप सी द्वारा आबंटित स्मृति पुनःआवंटन लिए .net कोड उम्मीद कर रहे हैं ++ रनटाइम ? –
यह http://stackoverflow.com/questions/5308584/how-to-return-text-from-native-c-code –
इस मामले में C++ रनटाइम द्वारा आवंटित नहीं किया गया है। – Qwertie