首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建从C到C#的混合模式C++桥?

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

Stack Overflow用户
提问于 2008-11-05 22:58:16
回答 3查看 3.7K关注 0票数 4

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

在本机动态链接库中,当我创建一个句柄时,我想调用混合模式C++动态链接库中的一个函数,并将指向该表面的指针与一个Hwnd/ D3DSurface一起传入。然后,该混合模式C++应该调用我的C#托管代码。

举个例子,在C中,我想做以下事情;

代码语言:javascript
复制
Hwnd handle;
LPDIRECT3DSURFACE d3dtarg;
SurfaceCreated(handle, d3dtarg);

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

代码语言:javascript
复制
public static class D3DInterop
{
    public static void SurfaceCreated(IntPtr handle, IntPtr surface)
    {
        //do work
    }
}

由于我不擅长C++,我只想知道是否有人可以给我一个例子,说明我需要为混合模式dll编写代码。我也不想编译带有directx头的混合模式dll,所以有没有一种方法可以把'C‘LPDIRECT3DSURFACE转换成一个泛型指针?在C#中,我只使用IntPtr。

EN

回答 3

Stack Overflow用户

发布于 2008-11-07 07:31:49

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

票数 3
EN

Stack Overflow用户

发布于 2008-11-06 01:01:44

你调查过Microsoft XNA吗?据推测,它已经为DirectX管理了包装器。

票数 2
EN

Stack Overflow用户

发布于 2008-11-06 14:16:29

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/267057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档