创建一个从C到C#的混合模式C++桥
Creating a Mixed Mode C++ Bridge from C to C#?
我希望有人能帮我,我主要是一名C#开发人员,所以我的C和C++技能不好。我有一个本机的C dll,它是更大的应用程序。我在linux上为windows交叉编译这个dll使用gcc。
在本机dll中,当我创建D3DSurface时,我想调用一个函数在混合模式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。
创建一个可从C调用的托管C++(C++/CLI)DLL项目,该项目还可以引用其他.Net程序集(即C#程序集)。然后,您的C++/CLI桥所要做的就是将数据类型从HWND转换为IntPtr等。
您研究过Microsoft XNA吗?据说它已经管理了DirectX的包装器。
您可以在混合模式DLL中使用void *
。存在从指向任何内容的指针(包括指向IDirect3DSurface
的指针)到void *
的隐式转换。然后可以将该指针强制转换为IntPtr
。
相关文章:
- OpenCV 混合模式实现:为什么看似等效的操作会产生不同的结果?
- 混合模式程序集是针对版本 'v2.0.50727' 构建的 ...本机C++/Visual C++/C# 项目错误
- Visual Studio混合模式调试是否可以附加到Jupyter笔记本以同时调试C++和Python
- 如何链接到C++/Cli混合模式dll中的本机类
- 调试混合模式应用程序(C# 和非托管 C++)时"The breakpoint will not currently be hit"错误
- 混合模式程序集(C++/CLI项目)在.NET Core上工作吗
- 如何处理混合模式项目中的打印
- c++ (Direct2D) 中的混合模式
- 链接到混合模式dll中的presentationcore.dll
- 通过混合模式c++ /CLI DLL从ETL工具中使用托管c# DLL -可能
- 内存管理在c++混合模式下的应用
- 如何将使用boost::asio的本地c++静态库导入CLI/ c++混合模式应用程序?
- 卸载混合模式组件
- 从混合模式c++项目中的CLR-to-SEH异常中获取明智的信息
- 用于混合模式项目的内存泄漏检测:托管、非托管和本机
- 在新托管线程中通过 C# 在混合模式程序集中调用 STL 矢量的push_back
- 正在尝试转换混合模式的公式
- 正在尝试转换混合模式的公式
- VS2010 中使用 .NET 3.5 的混合模式调试
- 使用本机C++、托管 C++ CLI 和 C# 解决方案在混合模式下进行调试