Załóżmy, że jest wbudowana funkcja z interfejsem czystej C, jak na przykładzie jednego eksportowane z natywnego DLL:Czy atrybuty P/Invoke [In, Out] są opcjonalne do porządkowania tablic?
// 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;
}
}
Poniżej P/wywołać współpracuje (testowane z VS2010 SP1)
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
[In, Out] int[] data
);
jak to P/wywołać, tak samo jak wyżej, lecz bez [In, Out]
atrybutów:
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
int[] data
);
Czy są zatem dostępne atrybuty [In, Out]
jako opcjonalne dla tablic marszałkowskich? Jaki jest ich cel, jeśli taki istnieje? Czy można je pominąć w naszych deklaracjach P/Invoke?
Ugh ... Spędziłem tyle godzin z mojego życia, rozwiązując problemy między X86/x64/"Any CPU" ... – JerKimball