4

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

在本机 dll 中,当我创建 D3DSurface 时,我想在混合模式 C++ dll 中调用一个函数,并将指向表面的指针与 Hwnd/句柄一起传递。然后,混合模式 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 。

4

3 回答 3

3

创建一个托管 C++ (C++/CLI) DLL 项目,该项目可从 C 调用,并且还能够引用其他 .Net 程序集(即您的 C# 事物)。然后,您的所有 C++/CLI 桥接器所要做的就是将数据类型从 HWND 转换为 IntPtr 等。

于 2008-11-07T07:31:49.327 回答
2

你看过微软 XNA吗?据说它已经管理了 DirectX 的包装器。

于 2008-11-06T01:01:43.560 回答
0

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

于 2008-11-06T14:16:28.840 回答