问题标签 [c++-cli]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1124 浏览

c# - 我是否完全误解了如何使用 Visual Studio 的 2008 探查器?

抱怨{

当我使用 Visual Studio 2008 的分析器(从分析菜单选项)分析我的代码时,我总是感到非常沮丧。在我看来,它是 VS 设计最差的功能之一,每次需要使用它时我都会畏缩不前。

}

关于它的使用我有几个问题,我希望你们能给我一些指示:-)

  1. 您是否需要在 Debug 或 Release 中构建您的项目来分析它们?一个对话框(我不知道如何返回)提到我应该在 Release 下进行概要分析。好的 - 我这样做了 - 当我去运行代码时,它告诉我我缺少 PDB 文件。惊人的。所以我回到调试模式,并尝试运行它,它告诉我一半的项目需要重新编译并打开 /PROFILE 开关。
  2. 是否可以分析 C++/CLI 项目?打开 /PROFILE 开关后,有一半时间我的 C++/CLI 项目完全没有输出。
  3. 为什么在尝试分析 C# 项目时,它们会在“模块”视图名称列表下的“报告”中显示为 0x0000001、0x0000002、0x0000003 等?真的吗,VS?真的吗?你猜不到我的模块名称?
  4. 就此而言,为什么函数名称报告为 0x0A000011、0x06000009、0xA0000068 等?
  5. 为什么,哦,为什么,VS 会在被分析的可执行文件的依赖树中重建所有内容?如果您的解决方案中有 5-6 个项目,这可能不是问题,但是当您有 70 个项目时,甚至不用理会分析器几乎更快
  6. 你能推荐任何关于使用 VS2008 分析器的好的指南吗?
0 投票
2 回答
2802 浏览

visual-studio - VS2008:具有代码覆盖率的单元测试不适用于 /CLR

我正在尝试在 VS2008 中设置具有代码覆盖率的单元测试,用于使用/clr编译的 C++/CLI DLL (不是 /clr:safe 或 /clr:pure - 它必须是 /clr,因为它使用 MFC) .

单元测试运行良好,但覆盖信息仅在我使用 /clr:safe 或 /clr:pure 编译时才有效。对于 /clr,代码覆盖结果窗口显示以下消息:

生成空结果:未使用任何已检测的二进制文件。查看任何仪器问题的测试运行详细信息。

我也尝试过“去越野”,但是当我将覆盖文件加载到 VS 中时,它也包含空结果。

恼人的是,我找不到任何具体说明代码覆盖率是否与 /CLR 一起使用的地方,所以我只好自己尝试一下。

如果它应该工作,谁能看到我在这里做错了什么?


[File]->[New]->[Project]
选择Class Library,输入MyProj作为项目名称,点击 OK

右键单击 MyProj 项目,选择 [Properties]
选择 [Configuration Properties]->[General]
确保“Common Language Runtime support”设置为/CLR

将此代码添加到Class1

构建解决方案

【测试】->【新建测试】->【单元测试】,点击确定,点击创建

将此代码添加到TestMethod1

右击TestProject1项目,选择【References】
点击“Add New Reference”在“Projects”选项卡中
选择MyProj,点击OK,再次点击OK

[Test]->[Edit Test Run Configuration]->[Local Test Run]
选择[Code Coverage]
Check MyProj.dll,点击Apply,点击Close

[测试]->[运行]->[解决方案中的所有测试]

测试结果窗口显示 TestMethod1 已通过。代码覆盖结果窗口显示以下消息

生成空结果:未使用任何已检测的二进制文件。查看任何仪器问题的测试运行详细信息。


右键单击 MyProj 项目,选择 [Properties]
选择 [Configuration Properties]->[General] 将
“Common Language Runtime support”更改为/CLR:SAFE/CLR:PURE,单击 OK

构建解决方案

[测试]->[运行]->[解决方案中的所有测试]

测试结果窗口显示 TestMethod1 已通过。代码覆盖率结果
窗口现在显示正确的覆盖率信息。

0 投票
4 回答
1792 浏览

.net - 请描述您使用 Microsoft C++/CLI 的经验

C++/CLI 是非常强大的语言。它是唯一可以无缝组合托管和非托管代码的 CLR 语言。有多少软件开发人员(在这个网站上)使用这种语言?你在什么样的项目中使用它?是改编遗留代码还是创建原始软件?您能否将旧的托管 C++ 与新的 C++/CLI 进行比较?您如何看待 C++/CLI 的当前质量和未来?

0 投票
3 回答
9116 浏览

c++-cli - C++/CLI-问题:是否有与 C#“is”关键字等效的方法,还是我必须使用反射?

我在 MSDN 上的某处读到,与 C# 的“is”关键字等效的是 dynamic_cast,但这并不是真正等效的:它不适用于值类型或泛型参数。例如,在 C# 中,我可以编写:

如果我尝试“等效”C++/CLI:

我收到编译器错误“错误 C2682:无法使用 'dynamic_cast' 将 'System::Object ^' 转换为 'T'”。

我唯一能想到的就是使用反射:

有没有更简单的方法来做到这一点?

0 投票
2 回答
7412 浏览

c# - 如何在同一解决方案中从 C++/CLi 项目中引用 C# 项目

我在一个解决方案中有两个项目,一个是 C# 库,另一个是 C++/CLI 库。

我已经使用 C# 库的引用菜单在 C++/CLI 项目中添加了一个引用。然后我添加

并尝试使用

但我得到了无法找到 assembly.name.dll 的错误。我已经尝试匹配程序集名称的大小写和所有小写,但没有用。令人惊讶的是,互联网上的任何地方都没有关于如何引用您自己创建的程序集的参考资料。

正确的是这样做,如果我做对了,我应该采取什么方法来诊断这个。

0 投票
1 回答
78 浏览

c++-cli - VS2005.NET 项目中的内部引用

我在 VS2005 中有一个 C++/CLI 类库项目,但我遇到了一些问题。我定义了一个名为 Languages 的类,它是一个枚举类。看起来像这样:

然后我有另一个类试图引用它,它位于同一个命名空间中:

但是我的项目没有编译。据我所知,即使认为它们在同一个命名空间中,不同的类也看不到对方。我假设我可能需要头文件和头文件的#includes,但我对 C++/CLI 的了解不够确定(我来自 C# 背景,几乎没有任何 C 经验)并且我尝试过很多我能想到的不同组合。我敢肯定,对于任何知道自己在做什么的人来说,我都遗漏了一些非常明显的东西,但可惜我没有。

提前致谢。

0 投票
1 回答
762 浏览

c# - 如何在 C++/CLI 中将属性添加到返回值?

在 C# 中,您可以使用属性来装饰函数返回值,如下所示:

我的问题是,如何在 C++/CLI 中做到这一点?我有这个:

但编译器出错了'return' : unknown attribute qualifier.

有没有我找不到的替代语法?

0 投票
1 回答
159 浏览

c++-cli - 我如何使用 SQLSMO

我是usnig visual studio2003和windows平台sdk2008。我必须在 C++ 中从 SQLDMO 迁移到 SQLSMO。我需要任何头文件才能在 C++ 中使用 sqlsmo。

任何机构都可以在这方面帮助我。

提前致谢。

0 投票
3 回答
4089 浏览

.net - 如何在 C++ 中使用 .Net 的命名空间?

如何使用 C++ 中的 .NET 框架命名空间?

0 投票
3 回答
12616 浏览

.net - C++/CLI:链接器为 win32 函数提供“未解析的令牌”

伙计们,

我刚刚创建了我的第一个 C++/CLI 项目 (Visual Studio 2008),它是一个库,允许我的 C# 应用程序访问销售点计数打印机。

当从 C# exe 调用时,我的库构建良好,并且琐碎的函数可以正常工作。

但是,一旦我包含 WinGDI 调用(在本例中为DeleteObject),链接器就会抱怨“未解析的令牌”错误。

错误 2 错误 LNK2028:未解析的令牌 (0A000088) "extern "C" int __stdcall DeleteObject(void *)" (?DeleteObject@@$$J14YGHPAX@Z) 在函数 "private: __clrcall ReceiptPrinter::Epson::~Epson( void)" (??1Epson@ReceiptPrinter@@$$FA$AAM@XZ) ReceiptPrinter.obj ReceiptPrinter

在过去的 4 年里,我没有做过任何严肃的 C++,而且我对 MS C++ 编译器的经验也很少,因此我不知道我在链接器设置中寻找什么。

任何帮助都将受到极大的欢迎。

谢谢