32位机上用vs2008开发的c++程序如何能在64位系统下运行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32位机上用vs2008开发的c++程序如何能在64位系统下运行?相关的知识,希望对你有一定的参考价值。

正常来说和在32位系统上运行不会有区别。

绝大多数32位Windows程序都是可以在64位Windows上运行的(VS本身也是一个32位的软件)。64位Windows会通过WOW64模拟32位程序的运行环境来运行32位程序(就像32位Windows通过WOW模拟16位运行环境来运行16位程序一样)。这里对于程序来说唯一一个显著区别就是32位Windows上32位程序默认只有2GB的用户地址空间,最多能设置成3GB。而WOW64里运行的32位程序可以使用4GB地址空间。但是绝大多数程序并不会因为这个区别产生异常。

不过和32位Windows上一样,运行VC++编写的32位程序可能会需要32位的C运行库的dll。也就是可能要装那个Microsoft Visual C++ 2008 Redistributable Package (x86)才能正常工作。

另外VS2008可以直接生成64位的可执行程序。也就是这个程序在本机没办法用,只有在64位系统里可以跑。当然默认情况下跑程序的那个系统上要有64位的C运行库的dll。
参考技术A 64位系统本来就兼容32位程序的。直接运行就是了。
但32位系统运行不了64位程序。
参考技术B 只需要注意变量的定义是64位的就可以了,
比如 int 变量需定义成int64。
字符串需定义成 unicode格式等等。
参考技术C 使用静态链接库编译,在菜单栏里这样设置:Project->Properties->Configuration Properties->General->Use of MFCUse MFC in a Static Library

如何在 Linux 上用 C++ 播放 .wav 文件?

【中文标题】如何在 Linux 上用 C++ 播放 .wav 文件?【英文标题】:How do I play .wav files in C++ on Linux? 【发布时间】:2016-06-24 04:26:22 【问题描述】:

我有一个关于在 C++ 中播放 .wav 文件的问题。我正在寻找一种在 Linux 和 Windows 上播放它的方法,我想在一个功能结束时分解它,你知道这个示例吗?

感谢您的任何回答:)!

我来自德国,请不要对我的语法或拼写生气:D。

【问题讨论】:

使用网络搜索查找内容。或者,从现有程序的源代码中获取灵感。 【参考方案1】:

有几种方法可以做到这一点。

最简单、最丑陋和最骇人听闻的方法是直接写入位于/dev/snd/ 的声音设备。但是,这实际上取决于您的 linux 发行版,而一些现代发行版不再允许您这样做。一般来说,对/dev/ 设备的直接读/写正在逐渐消失。 Here is a question answering this.

很长一段时间以来,“官方”的方式是使用使用 C 风格接口的 alsa 库。这通常非常棘手,充满陷阱和“变通方法”,具体取决于您的确切音频硬件。

我认为 alsa 正在逐渐被jack 取代,我希望它更易于使用。我没有这方面的经验。

我知道的最后一种方法是使用portaudio,顾名思义,它至少可以在windows、linux和osx之间移植。

所有这些库都可以让您控制您的音频硬件、初始化/设置/播放。 wav 文件的简单之处在于内容是原始 pcm,这通常是那些库使用的格式。 wav 格式通常是这样的:

[wav header] [audio data until the end of the file]

如果您可以在开始播放时管理几毫秒的垃圾,那么您也可以“安全地”发送标题以进行播放并避免对其进行解析。但是,您必须了解 PCM 格式,并且应该带来一些额外的阅读材料。

作为一个不直接涉及 C++ 的附加“技巧”,我强烈建议使用 Audacity。这是一个小程序,我看到它就像音频文件的记事本/vim。它体积小,加载速度快,允许您复制/粘贴音频片段并检测 pcm 格式。 (实际上,您只需更改 pcm 设置,直到音频“听起来”正确,但仍然有用)

【讨论】:

【参考方案2】:

标题提到了 Linux,但你在帖子中提到了 Windows 和 Linux。

对于 Linux,如果您坚持使用 C++,最好使用 gstreamer。查看 gst-launch 的 gstreamer 代码。它在 Linux 机器上运行如下。

$ gst-launch filesrc location="文件位置" !波形解析!阿尔萨斯克

发件人,http://sanchayanmaity.github.io/beagleboard-xm/linux/programming/software/2014/08/07/playing-wavmp3-file-using-gstreamer-in-code.html

对于 Windows,或者如果您想在 Windows 和 Linux 上使用与操作系统无关的代码,您可以使用 SDL,

http://lazyfoo.net/SDL_tutorials/lesson11/

另一种选择(跨平台、面向对象)是 SFML。查看音频 wav 文件播放示例,

http://www.sfml-dev.org/tutorials/2.0/audio-sounds.php

【讨论】:

以上是关于32位机上用vs2008开发的c++程序如何能在64位系统下运行?的主要内容,如果未能解决你的问题,请参考以下文章

visual c++ 2008中如何运行一个 .cpp文件

如何设置 VS2008 以进行高效的 C++ 开发

从 Visual Studio C++ 6.0 到 VS 2008?

如何将 vs2008 c++ OpenCV dll 构建到 vs2008 C#?

VS2008 中的 C++ 项目有效,但在 VS2010 中无效

如何向我的程序添加描述(-> 任务管理器中的描述列)(VS 2008,C++)