PInvoke hat den Stapel aus dem Gleichgewicht gebrachtC#

Ein Treffpunkt für C#-Programmierer
Guest
 PInvoke hat den Stapel aus dem Gleichgewicht gebracht

Post 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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post