创建从C到C#的混合模式C ++桥接?

我希望有人可以帮助我,我主要是一个C#开发人员,所以我的C和C ++技能很糟糕。 我有一个原生C dll,它是一个更大的应用程序的插件。 我使用gcc在linux上交叉编译这个dll for windows。

在我创建D3DSurface的原生dll中,我想在混合模式C ++ dll中调用一个函数,并将指针传递给表面以及Hwnd / handle。 那混合模式C ++应该调用我的C#托管代码。

例如,在CI中要做以下事情;

Hwnd handle; LPDIRECT3DSURFACE d3dtarg; SurfaceCreated(handle, d3dtarg); 

在C#中我希望从混合模式程序集中调用它

 public static class D3DInterop { public static void SurfaceCreated(IntPtr handle, IntPtr surface) { //do work } } 

由于我吮吸C ++,我只想知道是否有人能给我一个我需要为混合模式dll编码的例子。 我也不想用directx头编译混合模式dll,那么有没有办法将’C’LPDIRECT3DSURFACE转换为通用指针? 在C#中我只是使用IntPtr。

创建一个托管C ++(C ++ / CLI)DLL项目,该项目可以从C调用,也可以引用其他.Net程序集(即您的C#事物)。 那么你所有的C ++ / CLI桥必须做的是将数据类型从HWND转换为IntPtr等。

你看过微软XNA了吗? 它应该是DirectX的托管包装器。

您可以在混合模式DLL中使用void * 。 从指针到任何东西(包括指向IDirect3DSurface的指针)到void *的隐式转换。 然后,您可以将该指针IntPtrIntPtr