我想创建一个 C# 项目并实现现有的本机 (C++) 代码。有谁知道有关它的任何好的教程吗?

谢谢!

有帮助吗?

解决方案

您可以使用的P / Invoke,你可以调用非托管的方法。 我会后一些例子: 是MSDN官方文档的参考。 是一个社区,方法签名和实例以及编程和维持网站,最常用的Windows非托管库

其他提示

如果你的C ++代码管理(如你所说),那么我建议你把它作为C ++的除非的你有一个很好的理由 - 未来的C#(等)组件应该能够只是引用它“是”。

我假设由 实施现有代码 您的意思是您想从 C# 调用它,并对 C++ 代码进行最少的更改。

我是这本书的粉丝和最近的购买者 C++/CLI 实际应用 其中有一些在线有用的示例章节。

CodeProject 简介 是一个很好的起点。

C++/CLI in Action 的作者在 CodeProject 上有很多文章,请向下滚动到 C++/CLI 部分 他的索引.

关于 P/Invoke 的维基百科文章 您可能不想使用这种方法的原因有很多,我同意:

  • 编译器失去类型支持
  • 可能的数据类型或对齐问题,因为您必须手动映射类型
  • 需要固定垃圾收集的对象

MSDN 上最好的起点是 摘要文章.

可能做到这一点,最简单的方法是创建一个C ++ / CLI的项目,这将使你混合托管和非托管C ++。然后,你可以用你现有的非托管C ++类与托管.NET包装你的C#代码可以直接调用。 MSDN杂志具有很好的入门文章

互操作才会真正调用C风格的功能非常有用。你真的不能用它来与纯C ++类交互。

我做学到了这一点,所以我没有一个很好的教程,但有你需要知道的几件事情 - 托管C ++和C ++ / CLI都与非托管代码集成极少难看的接缝。这是不是与C#的情况。在托管C ++中,它很可能做一些这样的:

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

而在C#中你必须的P / Invoke到SetWindowText函数 - 不,你真的会:这只是一个简单的例子,但你需要知道的是,托管C ++编译器做了很多互操作的一个奇怪的组合你透明,并在同一时间做什么你(即,它会做任何隐marashalling)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top