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?
PInvoke hat den Stapel aus dem Gleichgewicht gebracht ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Verbindung zu virtuellen Kanälen mit C# Interop und vanara.pinvoke herstellen
by Anonymous » » in C# - 0 Replies
- 10 Views
-
Last post by Anonymous
-