我希望有人能在这方面帮助我,我主要是一个C#开发人员,所以我的C和C++技能很差。我有一个原生的C dll,它是一个更大的应用程序的插件。我用gcc交叉编译了这个用于linux上windows的dll。
在本机动态链接库中,当我创建一个句柄时,我想调用混合模式C++动态链接库中的一个函数,并将指向该表面的指针与一个Hwnd/ D3DSurface一起传入。然后,该混合模式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。
发布于 2008-11-07 07:31:49
创建一个managed C++ (C++/CLI) DLL项目,该项目可以从C调用,也可以引用其他.Net程序集(即您的C#程序集)。然后你所有的C++/CLI桥必须做的就是将数据类型从HWND转换成IntPtr,等等。
发布于 2008-11-06 01:01:44
你调查过Microsoft XNA吗?据推测,它已经为DirectX管理了包装器。
发布于 2008-11-06 14:16:29
您可以在混合模式DLL中使用void *。有一个从指向任何对象的指针(包括指向IDirect3DSurface的指针)到void *的隐式转换。然后,您可以将该指针转换为IntPtr。
https://stackoverflow.com/questions/267057
复制相似问题