3

我有一个项目需要为小型可执行文件编写代码。我使用 Visual C++ express 2010 IDE 来创建这个文件。完成代码编写后,我尝试将其复制到几台不同的 PC 上。每次我单击此文件执行它时,它都会给我一条错误消息。该消息指出我必须安装(.NET 框架)。我在 YouTube 上观看了几个视频,解释了如何通过将运行时库从多线程调试 DLL (/MDd) 更改为多线程调试 (/Mtd) 来克服这个问题。然而; IDE 无法调试 C++ 代码,因为当我使用 CLR 模板创建项目时!有没有办法解决这个问题?我可以创建一个类似的程序,一旦我在不同的 PC 上使用就不需要进一步下载了吗?

学习 JAVA 或 C# 等不同的语言是否有助于创建在大多数 Window 平台机器上运行的小程序(如我的程序)?

4

5 回答 5

7

只需使用 Qt——它可以在 Windows、Linux、MacOS 上运行,计划今年支持 Android 和 iOS,此外它还支持嵌入式平台和一些更晦涩的移动平台。此外,刚刚开始支持 Windows RT。一个完整的库,具有大量功能、良好的文档和大量的教育资源。它提供了大量的工具,从隐式共享容器到线程、信号和插槽、2D 和 3D 图形、小部件、多媒体、传感器……等等……

您甚至可以在 LGPL 许可下开发商业应用程序。

还附带了一个相当不错的 IDE——Qt Creator。

您可以开发标准 C++ 应用程序或使用 QML,这是一种类似于 JavaScript 的标记和脚本语言,用于从 C++ 实现的组件构建应用程序。您还可以扩展 QML。使用 QML 进行开发要快得多,并且您仍然可以在后台获得平台原生二进制文件的优势。

请注意,您仍然需要在您的应用程序中提供一些 DLL。当然,除非您使用静态构建,这需要您将应用程序开源,或者购买商业许可证......这并不便宜......

但是,几 MB 的 DLL 仍然比整个 .NET 框架好得多。静态构建将生成大约 8-9 MB 的可执行文件,没有外部依赖项。

于 2013-02-22T07:39:17.030 回答
3

坚持 C++ 标准,避免 Microsoft 扩展(托管代码),并且只调用操作系统的 POSIX 函数,那么您应该能够编写可移植程序。

于 2013-02-22T07:21:36.640 回答
1

您似乎创建了一个Managed C++ Project. 而是创建一个空Win32 C++ project文件,然后添加您的 .cpp/.h 文件。这将限制您使用所有具有 C++ 运行时的 PC 上可用的默认库。如果您也想删除该依赖项,则使用该/MT选项在运行时静态编译。详情@http: //msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.71).aspx

当您继续前进时,您需要了解您依赖哪些库以及这些库可用的操作系统版本,或者您是否需要将它们与您的位打包在一起。

于 2013-02-22T07:37:47.890 回答
0

Java 和 C# 都将有助于制作可移植的程序。但是,通常人们必须为用这两种语言编写的可执行文件安装运行时环境。如今,C++ 比以往任何时候都更便携。您可以在浏览器中轻松运行 C++ 可执行文件:

https://github.com/kripken/emscripten

http://code.google.com/p/nativeclient/

这使得 Java 和 C# 出现的许多原因变得无关紧要。

像 OpenGL 这样的开放标准也使可移植的 GUI 编程比以往更容易。如果您想用 C++ 编写简单的 GUI,请尝试 Qt。

于 2013-02-22T07:31:12.223 回答
0

注意:如果您没有使用 .NET 框架,则可以在任何计算机上运行 C++ 程序而无需安装任何东西。在您的情况下,可能有两个原因会在目标计算机中触发错误。

  1. 新计算机不需要运行时汇编。
  2. 新计算机没有安装必需的 .NET 框架。

………………………………………………………………………………………………………………………………………………

那么该怎么办:

  1. 在开始您的程序之前,您必须设计天气是否要使用 .NET 框架支持。如果您在开发程序时使用.NET 框架,那么您在目标计算机上安装相同或更高版本的.NET 框架。

  2. 如果您不需要使用 .NET 组件,那么您的目标计算机应该只包含运行时程序集。如何摆脱 .net 框架

    • 在解决方案中右键单击项目-> 属性-> 常规-> 通用语言运行时支持-> 选择“无通用语言运行时支持”。

………………………………………………………………………………………………………………………………………………

那么您需要的只是相关的运行时程序集在目标计算机中。

运行时程序集如何在新计算机中:

有两种方法:

  1. 在目标计算机上安装合适的 C++ 争议环境(如果你使用 VS2008 SP1,C++ RD 包应该是这个。请在下载前考虑解决方案构建架构(32 位/64 位))。

  2. 使用您的解决方案包部署运行时程序集。(我喜欢这个,因为用户不需要安装任何第三方组件)

………………………………………………………………………………………………………………………………………………

如何在我的项目中部署程序集:

  1. 为此,您的所有 DLL、LIB、EXE 都应使用相同的运行时版本。(如果没有,您将面临通过“清单”文件重定向程序集的麻烦)。

  2. 如何检查运行时版本。通过visual studio打开DLL、EXE(打开->文件)->展开RT_MANIFEST->双击其下的文件->然后程序集依赖细节将打开。-> 复制右栏中的数据并粘贴到记事本。

你会在那里看到这种线。还有你的特定 DLL 或 EXE 使用的版本运行时程序集。

assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86".....

在确定运行时程序集的版本后,请按照教程并尝试在新安装的计算机上运行。

最后:如果你认为这个 bla.. bla.. 很复杂,你的程序很简单,那么你可以考虑“运行时程序集静态链接”(试试谷歌)。但我个人不喜欢这种方法。

祝你好运!

于 2013-02-22T09:46:32.667 回答