Page 1 of 1

PInvoke hat den Stapel aus dem Gleichgewicht gebracht

Posted: 22 Dec 2024, 18:04
by Guest
Ich versuche, eine C-DLL in einem C#-Projekt zu verwenden.

Ich habe eine Funktion in C:

extern __declspec(dllexport) void InitBoard(sPiece board[8][8]);


die sPiece-Struktur:

typedef struct Piece
{
ePieceType PieceType; //enum
ePlayer Player; //enum
int IsFirstMove;
} sPiece;


Ich habe PInvoke in C#:

[DllImport("chess_api.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
static extern void InitBoard([MarshalAs(UnmanagedType.LPArray, SizeConst = 64)]ref sPiece[] board);


die sPiece-Struktur auf C#:

[StructLayout(LayoutKind.Sequential)]
public struct sPiece
{
public ePieceType PieceType;
public ePlayer Player;
public int IsFirstMove;
}


Wenn ich PInvoke ausführe, erhalte ich die folgende Fehlermeldung:


Ein Anruf Die PInvoke-Funktion „Chess!Chess.Main::InitBoard“ hat den Stapel aus dem Gleichgewicht gebracht. Dies liegt wahrscheinlich daran, dass die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur übereinstimmt. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.


Ich versuche, die Aufrufkonvention in Cdecl< zu ändern /code>, aber wenn ich es ausführe, bleibt der VS hängen.

Was soll ich tun?