|
|
1
4
不能将本机C++类型或代码直接暴露在.NET平台上。 然而,有三种方式与来自.NET的“原生”C++C++代码交互(C语言,VB.NET等等)。
从.net的角度来看,com可能是最容易使用的。只需将com对象作为引用添加到.net项目中,然后开始与接口和类交互。有关在.NET中与COM交互的更多详细信息,请阅读以下书籍: http://www.amazon.com/NET-COM-Complete-Interoperability-Guide/dp/067232170X 这当然要求您将游戏引擎对象公开为com对象。这不是小事。 接下来最容易使用的是p/invoke。如果您的游戏代码打包在一个带有c调用约定的标准windows dll中,则可以使用p/invoke访问该dll中的函数。例如:
你可以用p/invoke做很多事情。甚至让你的C/C++代码用委托来调用C,而不是什么。 我以前构建过游戏引擎工具,它使用p/invoke调用dll中公开的函数。你只需要小心本地资源的管理。在这里,IDisposable接口和类终结器成为您的朋友。如:
使用p/invoke有一个缺点。首先,它可以给本机调用增加一个显著的封送处理开销(尽管有加速的方法)。它还需要gameengine.dll中的c api。如果你的引擎是C++类,你必须为C++类提供一个C API。这会增加很多工作(或者需要一个代码生成器)。 我将不再详细介绍处理托管对象/数据与本机代码之间的封送处理的所有混乱细节。只要知道这是可以做到的,而且msdn是你在这里的朋友。 将本地C++代码暴露为.NET的第三种可能也是最好的方法是通过CLI/C++混合模式程序集。CLI/C++允许您在一个组件中无缝地混合本机和托管代码。 CLI/C++有一个有趣的语法,但是如果你是C++程序员,就不难适应。例如:
我的建议(已经完成了你想做的)是,对于任何比适度复杂的事情,最好的解决办法是尝试向游戏引擎提供CLI/C++ API。我学到了我所需要的所有关于CLI/C++Office MSDN的知识,但是我听说这本书是好的,如果你喜欢肉的汤姆。 http://www.amazon.com/Expert-Visual-CLI-Programmers-Experts/dp/1590597567 |
|
2
1
This article 描述过程。
你用
你用
你用
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |