问题标签 [managed-c++]

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 投票
1 回答
103 浏览

.net - 非托管 C++ 应用程序是否可以仅在需要托管类型时加载 CLR?

更重要的是,我有一个本机 C++ 应用程序,它可能永远不需要使用托管类型。我希望 CLR 一直处于卸载状态,直到实际上依赖于托管类型的代码路径被实际命中。

我试图使用 Visual Studio 2005 中的 /clr 开关来完成此操作,但据我所知,一旦使用该开关,整个 C++ 应用程序就会成为托管应用程序。有没有办法只为某个编译单元或函数指定它?我试图用#pragma unmanaged 在我的测试应用程序中标记我的main() 函数,但这并没有阻止它在启动时加载CLR。

0 投票
2 回答
9362 浏览

c# - P/Invoke 和 C++ 包装器之间的性能差异

在学习P/Invoke的过程中,我问了这个之前的问题:

涉及指针时如何 P/Invoke

但是,我不太了解在 C# 中使用 P/Invoke 对在托管 C++ 中创建包装器的影响。在 C# 中使用 P/Invoke 创建相同的 DLL 肯定会产生更清晰的界面,因为我可以在嵌入式资源上使用 DLLImport,但是我自己进行封送处理的本地 DLL 的托管 C++ 包装器会有更好的性能吗?

0 投票
1 回答
2592 浏览

c# - 如何从 C++ 调用托管 (C#) 函数?

我有一个 C# DLL 文件项目 ( my_cs_dll.dll),它定义了一个带有静态成员函数的静态类。

我还有一个 C++ DLL 项目,它正在使用/clr.

'my_cs_dll.dll'在 C++ 项目的公共属性引用部分添加了一个引用(复制本地/复制依赖项都是 True)。

我还在'my_cs_dll.dll'C++ 项目 Configuration Properties C/C++ General 'Resolve#using References' 部分添加了路径。

一切都没有错误地构建,但是在运行时我不断从系统中收到“System.IO.FileNotFound”异常,声称它找不到my_cs_dll.dll程序集。

这两个 DLL 文件肯定存在于我正在运行的同一目录中。

我已经尝试了上述设置的各种变体,并阅读了我在托管/非托管互操作上可以找到的所有内容,但我似乎无法让我的大脑了解问题所在......

我正在使用 Visual Studio 2008 和 .NET 3.5。

0 投票
1 回答
1228 浏览

c# - 用户定义的类的对象/类数组失败

我希望有更多 C++ 知识的人可以帮助我。我正在尝试从我在托管 C++ DLL 中创建的类中创建 C# 中的对象数组。我不知道发生了什么。我能够运行应用程序并构建它,设置类数组似乎工作得很好,但是当我从数组中调用一个函数时,它从不研究托管 DLL。我已经追踪了它,它根本不起作用。该应用程序也不会因任何错误而失败。有趣的是,当我删除了类数组并且只在它运行良好且花花公子时才启动该类。请帮我弄清楚如何解决这个问题。

0 投票
2 回答
2742 浏览

c# - 在 .NET 项目中复制本机 DLL 的最简洁方法

我有一个引用托管 C++ 项目的 C# GUI 应用程序,它需要 7 个本机 C++ DLL。我正在寻找将这 7 个 DLL 复制到最终项目输出的最干净的方法。

什么有效
将所有 DLL 添加到 C# 应用程序,指定:

构建操作 == “内容”
复制到输出目录 == 始终复制”

在某些情况下,这会使项目的基本文件夹变得一团糟,所有这些都是引用项目的要求,而不是项目本身。

什么不起作用

  • 使用上述设置将这些 DLL 添加到名为“Required DLLs”的文件夹中。它将其复制到输出中具有相同名称的文件夹中,导致它们位于错误的位置。我看不到指定输出目录的方法。
  • 嵌入式资源:在 C# P/Invoke 中,您可以将引用的 DLL 添加为嵌入式资源,并将 DLL 嵌入到最终库中。我在托管 C++ 中看不到这种可能性,我什至不确定它是否适用于引用链。
  • 将 DLL 作为内容添加到托管 C++ 项目中。这些文件不会被复制到输出目录。

在这种情况下,最好的解决方案是什么?如果可能的话,我希望托管 C++ 项目能够处理它自己的 DLL 要求,并且最好以一种不会阻止该项目跨多个应用程序使用的方式。

就拥有一个干净的项目而言,最好将我的所有代码文件插入项目的子文件夹中,并将 DLL 放在根目录以使第一个解决方案工作?

解决方案:
使用 Joseph 的构建后建议,以下命令可以使用“Required DLLs”文件夹。

xcopy "$(ProjectDir)Required DLLs*.*" "$(TargetDir)" /Q /Y

/Q 隐藏输出中的单个文件,并且 /Y 禁止覆盖提示。

0 投票
1 回答
110 浏览

ruby - 如何将 Ruby 1.9 与托管 C++ 一起使用?

我正在尝试创建一个点网库来使用 ruby​​,为此,我正在链接 ruby​​ 的静态库,但我遇到了一些 LNK 错误。

我正在使用 Visual Studio 2008,在此先感谢。

0 投票
2 回答
442 浏览

managed-c++ - 如何从托管 C++(旧语法)调用 Foo(long[][]) (C#)?

我有现有的带有签名的 C# 代码Foo(long[][] longs),我需要从非托管 C++而不是C++/CLI)调用这些代码。我似乎无法找出正确的组合__gc[]__gc*让编译器满意。

使用 C++/CLI,这很简单:

编辑:当我使用 Visual Studio 2008 时,“简单”的解决方案是将 C++/CLI 代码放在自己的文件中并使用/clr编译;当然,如果我不必这样做会更容易(例如,使用托管 C++ 的其他.h文件)。C# 代码无法更改,因为它是从 Web 参考自动生成的。

0 投票
1 回答
411 浏览

c++-cli - 混合 C++/CLI 程序集中的混乱

有没有办法从托管元数据中隐藏本机占位符定义(在反射器中可见)?

我正在创建一个混合模式 C++/CLI 程序集,其中包含一些使用 /clr 编译的文件和一些没有编译的文件。

我仅在本机代码中使用 boost 和 MFC,但 boost/MFC 标头仍需要 #included 到托管代码文件中。一旦完成(无论它们是否在 #pragma 非托管块中),来自 boost 和 ATL(又名 MFC)的所有命名空间和类名(尽管没有实际实现)都会出现在反射器视图中部件。

这不是一个严重的问题(毕竟,东西仍然可以正常工作),但它看起来很混乱,我宁愿它不存在。有没有办法摆脱它?

0 投票
1 回答
695 浏览

.net - Windows 窗体计时器错误或使用不当?

在使用 Windows 窗体编写一个小型 OpenGL 应用程序时,我发现了一些使用分析器的东西,我认为这很不可靠。

我正在使用System::Windows::Forms::Timer来检测鼠标空闲和其他一些用户输入的组合。刻度功能很有用,但有时我想“重置”计时器。您不能真正直接执行此操作,但您可以通过执行以下操作获得正确的效果:

定时器间隔为 50ms。有时我的“重置”代码每 30 毫秒运行一次。令我惊讶的是,这是一件非常费力的事情——我的程序执行的 30% 通常在这两行中!这不是经常调用这两条线的情况。在某些人为的情况下,此代码的调用频率与OpenGLSwapBuffers()示例一样多,但仅此而已。我将其解释为这两条线的成本大约是整个渲染循环的一半!

目前我正在使用一种解决方法,但计时器方法更优雅一些。我很好奇 - 为什么这两行的计算量如此之大?我错过了什么?有没有更好的方法来重置计时器?

0 投票
3 回答
647 浏览

c++ - C++ 中的动态内存分配

关于动态内存分配,“删除”和“处置”C++ 运算符有什么区别?