supponga che v'è una funzione nativa con un'interfaccia puro-C come il seguente, esportata da una DLL nativa:Gli attributi P/Invoke [In, Out] sono facoltativi per gli array di marshalling?
// 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;
}
}
Il seguente P/Invoke funziona bene (testato con VS2010 SP1):
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
[In, Out] int[] data
);
così come questo P/Invoke, come sopra, ma senza il [In, Out]
attributi:
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
int[] data
);
Quindi, sono quelli [In, Out]
attributi facoltativo per gli array di marshalling? Qual è il loro scopo, se esiste? E 'OK ometterli nelle nostre dichiarazioni P/Invoke?
Ugh ... Ho passato così tante ore della mia vita a risolvere problemi di marshalling effup tra x86/x64/'Any CPU' ... – JerKimball