2 votes

Convention d'appel en C++/CLI

J'ai défini une fonction pour une bibliothèque C++/CLI :

extern "C"
{
    INT_PTR __cdecl brl_graphics_Graphics(int Width, int Height, int Depth, int Hertz, int Flags);
}

Et voici la fonction qui l'appelle, c'est juste un wrapper :

IntPtr BlitzMax::BlitzMax::Graphics(int Width, int Height, int Depth, int Hertz, int Flags)
{
    return IntPtr(brl_graphics_Graphics(Width, Height, Depth, Hertz, Flags));
}

Quand je l'appelle depuis une application C#, je reçois une AccessViolationException, pour une raison quelconque dans le désassemblage, il n'utilise pas la convention d'appel cdecl :

push        dword ptr [ebp+10h] 
push        dword ptr [ebp+0Ch] 
push        dword ptr [ebp+8] 
mov         ecx,dword ptr [ebp-4] 
mov         edx,dword ptr [ebp-8] 
call        FFD595B8

0voto

Edward Points 235

Je ne suis pas entièrement certain de ce que vous essayez de faire, mais ce site Web peut vous aider http://tom-shelton.net/index.php/2008/12/11/creating-a-managed-wrapper-for-a-lib-file/.

Il fournit un guide étape par étape pour la création d'une classe C++ native (qui peut simplement être des fonctions), les envelopper dans un wrapper C++/CLI et ensuite utiliser le wrapper dans un programme C#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X