Я пытаюсь использовать C DLL в проекте C#.PInvoke имеет несбалансированный стек
У меня есть функция в C:
extern __declspec(dllexport) void InitBoard(sPiece board[8][8]);
Spiece структура:
typedef struct Piece
{
ePieceType PieceType; //enum
ePlayer Player; //enum
int IsFirstMove;
} sPiece;
У меня PInvoke в C#:
[DllImport("chess_api.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
static extern void InitBoard([MarshalAs(UnmanagedType.LPArray, SizeConst = 64)]ref sPiece[] board);
структура Spiece на C#:
[StructLayout(LayoutKind.Sequential)]
public struct sPiece
{
public ePieceType PieceType;
public ePlayer Player;
public int IsFirstMove;
}
Когда я бегу PInvoke я получаю следующее сообщение об ошибке:
A call to PInvoke function 'Chess!Chess.Main::InitBoard' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
Я пытаюсь изменить соглашение о вызовах в Cdecl
, но когда я запускаю его, VS застрял.
Что я должен делать?
@Mark. Я видел этот ответ, и это не помогло, потому что я пытаюсь изменить PInvoke, как было сказано там, и он застрял в моем VS. –
InitBoard ожидает указатель, но вы даете ему указатель-указатель, потому что ref с ссылочным типом является двойным направлением. Это следующая ошибка, которую вы обнаружите. – usr