У меня есть следующие C структурыВызов из C# для функции C, которые принимают массив структуры, выделенный абоненту
struct XYZ
{
void *a;
char fn[MAX_FN];
unsigned long l;
unsigned long o;
};
И я хочу, чтобы вызвать следующую функцию из C#:
extern "C" int func(int handle, int *numEntries, XYZ *xyzTbl);
Где xyzTbl представляет собой массив XYZ размера numEntires, который выделяется вызывающим абонентом
Я определил следующую структуру C#:
[StructLayoutAttribute(Sequential, CharSet = CharSet.Ansi)]
public struct XYZ
{
public System.IntPtr rva;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 128)]
public string fn;
public uint l;
public uint o;
}
и метод:
[DllImport(@"xyzdll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern Int32 func(Int32 handle, ref Int32 numntries,
[MarshalAs(UnmanagedType.LPArray)] XYZ[] arr);
Тогда я пытаюсь вызвать функцию:
XYZ xyz = new XYZ[numEntries];
for (...) xyz[i] = new XYZ();
func(handle,numEntries,xyz);
Конечно, это не работает. Может ли кто-то пролить свет на то, что я делаю неправильно?
К сожалению, что это за ошибка? – Mehrdad
При вызове 'func' второй параметр нуждается в' ref' перед ним, так как это 'ref' в объявлении функции. – CodesInChaos