51

我正在开发一个主要从 ac# 应用程序使用 c++/cli 库的项目。

有没有办法让 c++/cli 中的代码注释对 Visual Studio 中的 c# 智能可见?

假设没有,那么记录 c++/cli 代码以使其更容易从 c#(当然也包括在 c++/cli 中)使用的最佳方法是什么?您对 XML 注释、doxygen 和其他工具(哪个)有何看法?

4

5 回答 5

57

我已经让它按如下方式工作:

  1. 为您的 C++/CLI 标头条目使用 XML 样式注释。这意味着需要完整的 XML 注释(三斜杠注释,<summary>至少有标记)

  2. 确保 C++ 编译器选项生成 XML 文档文件已打开。这应该会生成一个 XML 文件,其中包含与您的程序集 (MyDll.xml) 同名的文档。

  3. 确保 C# 项目引用您的程序集 MyDll.dll,其中 MyDll.xml 也存在于同一文件夹中。当您将鼠标悬停在程序集中的引用上时,MS Visual Studio 将加载文档。

这适用于我在 Visual Studio 2008 中为 .NET 3.5 构建的程序集。

于 2009-07-02T00:27:26.410 回答
2

DocXml 的主要优点是受 VS 支持(语法着色、智能感知、自动导出到 XML 文件)。Doxygen 工具可以读取 DocXml 格式,因此您仍然可以将它们与这种格式一起使用。

为了帮助您以最少的努力生成整洁准确的文档注释,您可能想查看我的插件AtomineerUtils。这消除了创建和更新 DocXml、Doxygen、JavaDoc 或 Qt 格式注释的大部分工作,并且它支持 C、C++、C++/CLI、C#、Java、JavaScript、TypeScript、JScript、UnrealScript、PHP 和 Visual Basic 代码。

于 2009-07-02T20:53:09.207 回答
1

有趣的。在尝试了几种方法之后,托管 C++ 项目和 C# 之间的智能感知似乎不起作用。

以下示例将在声明它的 C++ 环境中为您提供正确的智能感知,但在 C# 中引用该对象不会显示任何内容:

// Gets the value of my ID for the object, which is always 14.
public: virtual property int MyId
{
    int get() { return 14; } 
}

XML 注释也不起作用。我猜这要么是一个错误,要么需要我无法弄清楚的东西。从这个问题缺乏答案来看,也许是一个错误。

至于文档生成,我建议走 XML 文档的路径。Doxygen 支持读取 XML 文档,这与 C# 的标准 XML 文档基本相同。它确实倾向于为标签打开和关闭添加额外的行,但在我看来比以下 doxygen 替代品更具可读性:

//! A normal member taking two arguments and returning an integer value.
/*!
  \param a an integer argument.
  \param s a constant character pointer.
  \return The test results
  \sa Test(), ~Test(), testMeToo() and publicVar()
*/
于 2009-06-24T19:52:28.240 回答
0

你说的对。它不起作用。C++ 构建会将其 IntelliSense 信息添加到主 .ncb 文件中,并且您将获得方法名称的自动完成等。但是,您是正确的,因为您将无法获得有关每个方法的“注释”描述等.

于 2009-07-01T19:42:42.847 回答
0

看看 Doxygen,你可能会有很多价值。然后查找 Doxygen.NET - 这是我们为自己使用而编写的东西,它从 Doxygen 的 XML 文件输出构建“对象层次结构”......

于 2009-07-01T20:05:07.123 回答