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

C# 创建混合模式C++;从C桥到C桥?,c#,c++,interop,mixed-mode,C#,C++,Interop,Mixed Mode,我希望有人能在这方面帮助我,我主要是一名C#开发者,所以我的 C和C++技能都很差。我有一个本地的C dll,它是一个 更大的应用。我在linux上为windows交叉编译这个dll 使用gcc 在本机dll中,当我创建D3D曲面时,我想调用一个函数 在混合模式C++ + DLL中,并传递到指针的表面上 带一个Hwnd/手柄。混合模式C++应该调用我的C语言。 托管代码 作为一个例子,在C语言中,我想做以下工作: Hwnd handle; LPDIRECT3DSURFACE d3dtarg; S

我希望有人能在这方面帮助我,我主要是一名C#开发者,所以我的 C和C++技能都很差。我有一个本地的C dll,它是一个 更大的应用。我在linux上为windows交叉编译这个dll 使用gcc

在本机dll中,当我创建D3D曲面时,我想调用一个函数 在混合模式C++ + DLL中,并传递到指针的表面上 带一个Hwnd/手柄。混合模式C++应该调用我的C语言。 托管代码

作为一个例子,在C语言中,我想做以下工作:

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

你调查过吗?它应该具有DirectX的托管包装。

您可以在混合模式DLL中使用
void*
。从指向任何对象的指针(包括指向
IDirect3DSurface
的指针)到
void*
都有一个隐式强制转换。然后,可以将指针转换为<代码> ItpTrt/COD> .< /P> < P>创建一个托管C++(C++/CLI)DLL项目,该项目将从C调用,也可以引用其他.NET程序集(即C++语言)。然后,您的C++/CLI桥需要做的就是将数据类型从HWND转换为IntPtr,等等