मान लें के बाद एक तरह एक शुद्ध सी इंटरफेस के साथ एक देशी समारोह, एक देशी DLL से निर्यात किया है कि वहाँ:पी/Invoke [इन, आउट] विशेषताएँ मार्शलिंग सरणी के लिए वैकल्पिक हैं?
// NativeDll.cpp
extern "C" void __stdcall FillArray(
int fillValue,
int count,
int* data)
{
// Assume parameters are OK...
// Fill the array
for (int i = 0; i < count; i++)
{
data[i] = fillValue;
}
}
निम्नलिखित पी/आह्वान ठीक काम करता है (VS2010 SP1 के साथ परीक्षण किया गया):
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
[In, Out] int[] data
);
के साथ ही इस पी/आह्वान, ऊपर के रूप में ही है, लेकिन बिना [In, Out]
गुण:
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
int[] data
);
तो, [In, Out]
विशेषताएँ वैकल्पिक मार्शलिंग सरणी के लिए हैं? उनका उद्देश्य क्या है, यदि कोई है? क्या यह हमारे पी/आमंत्रण घोषणाओं में उन्हें छोड़ना ठीक है?
उह ... मैंने x86/x64/'किसी भी CPU' के बीच मार्शलिंग effups के अपने जीवन समस्या निवारण के इतने घंटे बिताए हैं ... – JerKimball