我已经为C ++ / CLI库定义了一个函数:
extern "C"
{
INT_PTR __cdecl brl_graphics_Graphics(int Width, int Height, int Depth, int Hertz, int Flags);
}
这是调用它的函数,它只是一个包装器:
IntPtr BlitzMax::BlitzMax::Graphics(int Width, int Height, int Depth, int Hertz, int Flags)
{
return IntPtr(brl_graphics_Graphics(Width, Height, Depth, Hertz, Flags));
}
当我从C#应用程序调用它时,我得到一个AccessViolationException,由于某种原因,在反汇编中它不使用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
答案 0 :(得分:0)
我不完全确定你要做的是什么,但是这个网站可能有用http://tom-shelton.net/index.php/2008/12/11/creating-a-managed-wrapper-for-a-lib-file/。
它提供了创建本机C ++类(可以只是函数)的分步指南,将它们包装在C ++ / CLI包装器中,然后在C#程序中使用包装器。