電子書籍の厳選無料作品が豊富!

Visual Studio Pro 2012 の Visual C++ 2012 でネイティブ コード(マシン語)を作ったつもりなのですが、他のコンピューターで動きません。詳細を以下に記しますので、皆様のアドバイスをお願いします。

VS 2012 インストール環境:Windows 7 Ultimate 64ビット
VC++ プログラム:秀和システム発行 「Visual C++ 2010」 47ページに記載されているコンソールアプリケーション用の次のプログラム

#include “stdafx.h”
#include <iostream>
using namespace std;

int main()
{
cout << “Hello World!”
return 0;
}

動作時の現象
1.VS 2012 をインストールしてあるPCでは問題なく正常動作します。
2.VS 2012 をインストールしてない別のPC2台(Windows 7 Ultimate 64ビット)では、次のメッセージが表示され、動作しません。
「コンピューターに MSVCP110D.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」
3.Windows PE 3.1 で起動した別のPCでは次のメッセージが表示されます。
「この種類のイメージのサポートに必要なサブシステムがありません。」
2と同じことを言っているようです。

MSVCP110D.dll は、VC++ のインストールで sytem32 フォルダーに3種類のCPU (x86、x64など)用のファイルが自動的にインストールされています。
私の感覚で一番疑わしいのは、正しいネイティブ コードが出力されていないのではないかと考えるのですが、上記秀和システム発行の図書の、38ページで「・・・ネイティブプログラミングをメインに解説し、巻末でC++/CLIプログラミングの解説を行う」と書いてあるので、図書の指示に従えば、マシン語のプログラムが完成するものと考えられます。
次に疑わしいのは、私の誤解による間違いです。

状況は以上の通りです。私の能力では、解決不可能です。経験者のご支援をお願いします。

A 回答 (5件)

突っ込みどころ満載なんで総スルーして問題だけ解決します。



以下のURLでダウンロードできる「再頒布可能パッケージ」を、動かすPCにインストールしてください。
VC2010の無印かSP1か、またx86(32bit)かx64(64bit)かで分かれています。

無印 32bit
http://www.microsoft.com/ja-jp/download/details. …
SP1 32bit
http://www.microsoft.com/ja-jp/download/details. …
無印 64bit
http://www.microsoft.com/ja-jp/download/details. …
SP1 64bit
http://www.microsoft.com/ja-jp/download/details. …
    • good
    • 0
この回答へのお礼

okgoriponさん、ご親切な回答ありがとうございます。
私の理解不足を痛感しました。「Visual C++ 再頒布可能パッケージ」の文言は何度か目にしたことがありますが、全く気にしていませんでした。
VC++ で作成したモジュールをそのまま配布(コピー)すれば動くのだと思い込んでいました。
ご親切に感謝します。

お礼日時:2013/04/22 14:41

そこで言っている「ネイティブコード」ってのは、.NetFrameworkとかを使用しない。


って意味でしかありません。

マシン語で~という言い方はさらに正しくありません。
マシン語とか言ったらハンドアセンブルなりして16進の羅列になりますよ。
せいぜいアセンブリ言語じゃないですかね?

んで、掲示されているのはただのC++言語です。

VS2012がインストールされていない環境で動かない。
ってのは既に回答されているようにランタイムライブラリがインストールされていないからです。
VSのバージョン毎にインストールが必要になるもので…毎回こういう質問が出てくるくらいおなじみなネタです。

んで、やはり既に回答がありますが、「デバッグ版」は他の環境へ持って行くのは正しくありません。
# DLLだけコピーして~とかやろうとする人もいますが、デバッグ版のDLLを勝手に他のマシンにコピーするのはライセンス上問題があったかと。
リリース版でビルド(添付画像でReleaseを選択してビルド)して、対象PCにはランタイムを別途インストールする。
と言うのが正しいです。
「VC++ 2012 でマシン語プロが作れ」の回答画像5
    • good
    • 0

やりたいことは、ネイティブプログラミングじゃなくコンソールアプリじゃないかと


Win用のネイティブプログラミングだと意味が違ってきますし、C++解説本の様なので
コンソールアプリで問題無いかと・・・

VC++入門 コンソールアプリケーションの作成(バージョンが古いですが)
http://mcn-www.jwu.ac.jp/~yokamoto/openwww/cpp/i …

マシン語とは、本当に16進数を書き込んでいく形になり、一般的にはマシン語と対になる
アセンブリ言語を使用します。

インラインアセンブラで学ぶアセンブリ言語 第1回
http://codezine.jp/article/detail/393

最近、Java中心なので何ともなのですがコンソールアプリだとMSVCP110D.dllは不要なはず・・
    • good
    • 0

> Visual Studio Pro 2012 の Visual C++ 2012 でネイティブ コード(マシン語)を作ったつもりなのですが、



標準の設定だと、ライブラリの静的リンクは行なわれず、プログラムの実行時にライブラリを動的にリンク、参照する実行形式(.exe)が作成されます。
ダイアログとか文字列の標準出力とかの処理をそういう共通モジュールに行なわせ、プログラムのサイズを小さくするなんかのメリットがあります。

ネイティブコードって定義が不明瞭ですが、dll無しに動作する実行形式を作成するためには、自分はVS2012は持ってないですが、プロジェクトの設定でそういう物を静的リンク、スタティックリンクする設定に変更する必要があるハズ。


> 2.VS 2012 をインストールしてない別のPC2台(Windows 7 Ultimate 64ビット)では、次のメッセージが表示され、動作しません。

最近のWindowsは標準でVC++用のランタイムが入ってないそうなので、そちらをインストールする必要があります。

Visual Studio 2012 更新プログラム 1 の Visual C++ 再頒布可能パッケージhttp://www.microsoft.com/ja-jp/download/details. …

| Visual C++ 再頒布可能パッケージは、Visual Studio 2012 を使用して開発されたアプリケーションを Visual Studio 2012 がインストールされていないコンピューター上で実行するために必要な、Visual C++ ライブラリのランタイム コンポーネントをインストールします。


> 「コンピューターに MSVCP110D.dll がないため、

VC++6.0とかの話だと、△△△D.dllはデバッグ用のdllです。
通常のVC++ランタイムをインストールしても、デバッグ用のランタイムまでは入りません。
リリース用の実行形式を使ってください。
    • good
    • 0
この回答へのお礼

neKo_deuxさん、ご親切な回答ありがとうございます。
私の理解不足を痛感しました。「Visual C++ 再頒布可能パッケージ」の文言は何度か目にしたことがありますが、全く気にしていませんでした。
VC++ で作成したモジュールをそのまま配布(コピー)すれば動くのだと思い込んでいました。
ご親切に感謝します。

お礼日時:2013/04/22 14:39

それってマシン語じゃないんだけど。


VCでマシン語書きたければ、本当にマシン語で書かないとだめじゃないの?
VCなので当然ランタイムが必要になります。

この回答への補足

masatsan、回答ありがとうございます。Visual Studio は、Microsoft で唯一のネイティブ コード(マシン語)の作れるIDEと言われています。VC++は、.NetFramework 用のCLI(masatsanの言われるランタイム)を利用したアプリケーション開発用としての利用が主流ですが、アンマネージのC環境も含まれており、マシン語プログラムも作れる特徴が1つの売りになっていると解釈しています。このことは、有名な『猫でもわかる・・・』にも記載されており、間違いないと思います。
ネイティブ コードに挑戦するのは、初めてなので、私も経験がありません。

補足日時:2013/04/21 18:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!