के साथ स्ट्रक्चर देता है, इसलिए, इस प्रश्न के कई रूप हैं, और कई को देखने के बाद भी मैं इसे समझ नहीं पाया।सी # कॉलिंग सी फ़ंक्शन जो फिक्स्ड साइज चार सरणी
typedef struct
{
unsigned long Identifier;
char Name[128];
} Frame;
Frame GetFrame(int index);
यह सी # कोड है::
इस सी कोड है
struct Frame
{
public ulong Identifier;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 128)]
public char[] Name;
}
[DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern Frame GetFrame(int index);
यह अंतिम प्रयास मैं सी # में करने की कोशिश की है, और यह बहुत तार्किक लगता है, लेकिन मैं मिलता है त्रुटि "विधि का हस्ताक्षर PInvoke संगत नहीं है।" तो, मैं आगे की कोशिश करने के लिए क्या खो गया हूँ। किसी भी मदद की सराहना की है।
धन्यवाद, केविन
अपडेट किया गयाकेविन मेरे जवाब देने के लिए एक संपादन के रूप में इस जोड़ा
मैं बजाय मेरी सी कोड बदलना चाहिए:
void GetFrame(int index, Frame * f);
और सी # के लिए बजाय का उपयोग :
struct Frame
{
public uint Identifier;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 128)]
public string Name;
}
[DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern void GetFrame(int index, ref Frame f);
आप इस देखा http://social.msdn.microsoft.com/Forums/en-AU/csharplanguage/thread/6e0ad208-5c8b-48ac-a45e-cfaf7f52221b? – MilkyWayJoe
फ़ंक्शन परिभाषा मौजूद है। सूचीबद्ध सी कोड केवल हेडर फ़ाइल से है। –
मैंने देखा और निजी स्थैतिक बाहरी IntPtr GetFrame (int अनुक्रमणिका) की कोशिश की; लेकिन कॉलिंग ने त्रुटि को फेंक दिया "संरक्षित स्मृति को पढ़ने या लिखने का प्रयास किया।" –