问题标签 [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 投票
3 回答
1157 浏览

linker - 我需要将我的混合模式应用程序链接到哪些库?

我正在将 .NET 支持集成到我们的 C++ 应用程序中。
这是一个老式的 MFC 应用程序,有 1 个额外的文件使用“/clr”选项编译,该选项引用 CWinFormsControl。

我不允许删除链接器标志“/NODEFAULTLIB”。
(我们有自己的构建管理系统,而不是 Visual Studio。)
这意味着我必须指定所有必要的库:VC 运行时和 MFC。

其他编译器选项包括“/MD”

接下来:我不能使用链接器标志“/FORCE:MULTIPLE”而只是添加所有内容
我正在寻找一组不重叠的库。

0 投票
3 回答
3278 浏览

compiler-construction - 混合 C++/CLI TypeLoadException 内部限制:字段太多

为了将一些新的 UI 迁移到托管/C# 领域,我最近在一个大型遗留项目上打开了公共语言运行时支持 (/clr),该项目在共享 DLL 中使用 MFC,并依赖于我们内部的大约十几个其他项目整体解决方案。这个项目是我们应用程序的核心,它将驱动生成的任何托管 UI 代码(因此需要打开 clr 对互操作的支持)。

在修复了大量的小错误和警告之后,我终于设法让应用程序编译。但是,运行应用程序会导致 EETypeLoadException 并且让我无法调试......

做了一些挖掘,我发现原因是“System.TypeLoadException:内部限制:字段太多”。这发生在编译结束时。然后我找到了这个链接,它建议将程序集分解为两个或多个 dll。但是,在我的情况下这是不可能的,因为我的限制是遗留代码基本上保持不变。

任何人都可以提出任何其他可能的解决方案吗?我在这里真的走投无路了。

0 投票
5 回答
68323 浏览

.net - 在 C++/CLI 中转换 char* 和 System::String 的最佳方法是什么

在 C++/CLI 中从 char* 转换为 System::string 并返回的批准方法是什么?我在 Google 上找到了一些对 marshal_to<> 模板化函数的引用,但似乎此功能从未适用于 Visual Studio 2005(并且不在 Visual Studio 2008 中,AFAIK)。我还在Stan Lippman 的博客上看到了一些代码,但它是 2004 年的。我还看到了 Marshal::StringToHGlobalAnsi()。有没有一种被认为是“最佳实践”的方法?

0 投票
5 回答
16865 浏览

c# - 将 C++/CLI 转换为 C#

我有一个使用 C++/CLI 的中小型项目。我真的很讨厌 C++/CLI 的语法扩展,我更喜欢在 C# 中工作。有没有一种工具可以很好地将一个翻译成另一个?

编辑:当我说托管 c++ 之前我显然是指 c++/CLI

0 投票
9 回答
756 浏览

.net - 如何强制所有子级覆盖父级的 Clone() 方法?

如何确保所有派生的 C++/CLI 类将覆盖基类的 ICloneable::Clone() 方法?

你觉得我应该担心这个吗?或者这不是基类作者的责任?

修正:对不起,我忘了提到基类是一个非抽象类。

0 投票
2 回答
6897 浏览

.net - 在 C++/CLI 中将 std::vector<>::iterator 转换为 .NET 接口

我正在包装一个本机 C++ 类,它具有以下方法:

1) 表示这种接口的“.NET 方式”是什么?返回数组<>的单个方法?array<> 泛型是否有迭代器,以便我可以实现 BeginLocals() 和 EndLocals()?

2) Local 是否应该在 .NET 包装器中声明为值结构?

我真的很想用 .NET 风格来表示包装类,但我对托管世界很陌生——这种类型的信息让谷歌感到沮丧......

0 投票
1 回答
1403 浏览

.net - 避免使用 C++/CLI 属性的双重打击

我已经读过(在 Nish Sivakumar 的书C++/CLI In Action以及其他地方)你应该在函数调用上使用 __clrcall 装饰器以避免双重重复,以防你知道永远不会从非托管代码调用该方法。Nish 还说,如果方法签名包含任何 CLR 类型,那么 JIT 编译器将自动添加 __clrcall。我不清楚的是在创建 C++/CLI 属性时是否需要包含 __clrcall。从某种意义上说,属性只能从 .NET 语言访问,另一方面,C++/CLI 编译器(我认为)只生成可从托管代码和非托管代码调用的方法(例如 ***_get() )。那么我是否需要在我的属性上使用 __clrcall 修饰符,如果需要,它在哪里?在 get/set 函数本身上?

0 投票
3 回答
414 浏览

.net - 托管 C++ 方法命名

我正在使用托管 c++ 来实现一个返回字符串的方法。我使用以下签名在头文件中声明该方法:

但是,当我在 C# 中使用此方法时,签名是:

如何摆脱方法名称末尾的额外“W”?

0 投票
2 回答
855 浏览

c# - 在 C++\CLI 中转换枚举的问题

我有一个用 C++\CLI 编写的程序集,它使用 .Net 提供的一些枚举。它有这样的性质:

它工作正常,但是当我从我的 C# 代码中使用这个程序集时,这个属性的类型是

我必须进行类型转换

问题很简单:为什么会这样,以及如何解决?

0 投票
4 回答
4142 浏览

.net - 在 C++/CLI 包装类中翻译异常的最佳实践

我正在为抛出异常的现有本机类编写一个 .NET 包装类。在原生 C++ 异常和托管异常之间进行转换的最佳实践是什么?在一对一的基础上捕获并重新抛出(例如 std::invalid_argument -> System.System.ArgumentException)?是否已经在某处绘制了地图?