我想创建一个 C# 项目并实现现有的本机 (C++) 代码。有谁知道任何关于它的好教程?
谢谢!
如果您的 C++ 代码是托管的(如您所说),那么我建议您将其保留为 C++ ,除非您有充分的理由——未来的 C#(等)程序集应该能够按原样引用它'。
我假设通过实现现有代码意味着您想从 C# 调用它,而对 C++ 代码的更改最少。
I'm a fan and recent purchaser of the book C++/CLI in Action which has a couple of useful sample chapters online.
This intro on CodeProject is a good starting point.
The author of C++/CLI in Action has a number of articles on CodeProject, scroll down to the C++/CLI section on his index.
The Wikipedia article on P/Invoke has a number of reasons why you might not want to use that approach, with which I agree:
The best starting point on MSDN is the summary article.
您为什么不尝试为您的 C++ 代码使用托管包装器。
可能最简单的方法是创建一个 C++/CLI 项目,这将使您能够混合托管和非托管 C++。然后,您可以使用 C# 代码可以直接调用的托管 .Net 包装器来包装现有的非托管 C++ 类。MSDN 杂志有一篇关于 C++/CLI 的很好的介绍性文章。
互操作只会对调用 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++ 编译器是一个奇怪的组合,它透明地为您执行大量互操作同时什么也不为你做(即,它不会做任何隐含的编组)。