Я пытаюсь упорядочить структуру, которая возвращается моим собственным кодом, но я получаю System.Runtime.InteropServices.MarshalDirectiveException
Это не выходной аргумент, который уже отвечал в других сообщениях, это тип возврата.
Код C ++:
typedef struct
{
bool success;
ErrorCode error_code;
char error_path[1025];
} Result;
DLLEXPORT Result GetResult();
ErrorCode
- это перечисление,
C # эквивалент:
[StructLayout(LayoutKind.Sequential)]
public struct Result
{
public byte success;
public ErrorCode error_code;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 1025)]
public char[] error_path;
}
[DllImport("shared", EntryPoint = "GetReult", CallingConvention = CallingConvention.Cdecl)]
public extern static Result GetResult();
Я знаю, что возвратные структуры в C # p / invoke должны быть blitable введите, но я не знаю, смогу ли я сделать мою структуру прозрачной с помощью директив Marshaling или нет.Есть ли способ сделать это или что-то не так с моим кодом?Если нет способа, мне нужно изменить свой API и сделать тип возвращаемого значения в качестве выходного аргумента.
Спасибо.