2

我为 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
4

1 回答 1

0

我不完全确定你想要做什么,但这个网站可能会帮助http://tom-shelton.net/index.php/2008/12/11/creating-a-managed-wrapper- for-a-lib-file/

它提供了创建本机 C++ 类(可以只是函数)的分步指南,将它们包装在 C++/CLI 包装器中,然后在 C# 程序中使用包装器。

于 2012-10-26T13:29:11.543 回答