- ベストアンサー
VC++ 2012でマシン語プロが作れません
- Visual Studio Pro 2012のVisual C++ 2012で作成したネイティブコード(マシン語)が他のコンピューターで動作しない問題が発生しています。
- Windows 7 Ultimate 64ビットのPCでは正常に動作しますが、別のWindows 7 Ultimate 64ビットのPCではMSVCP110D.dllがないためプログラムが開始できず、Windows PE 3.1で起動したPCでは必要なサブシステムがないため動作しません。
- 問題の原因は、正しいネイティブコードが出力されていない可能性や誤解による間違いなど複数考えられます。経験者のアドバイスをお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
突っ込みどころ満載なんで総スルーして問題だけ解決します。 以下のURLでダウンロードできる「再頒布可能パッケージ」を、動かすPCにインストールしてください。 VC2010の無印かSP1か、またx86(32bit)かx64(64bit)かで分かれています。 無印 32bit http://www.microsoft.com/ja-jp/download/details.aspx?id=5555 SP1 32bit http://www.microsoft.com/ja-jp/download/details.aspx?id=8328 無印 64bit http://www.microsoft.com/ja-jp/download/details.aspx?id=14632 SP1 64bit http://www.microsoft.com/ja-jp/download/details.aspx?id=13523
その他の回答 (4)
- Wr5
- ベストアンサー率53% (2173/4061)
そこで言っている「ネイティブコード」ってのは、.NetFrameworkとかを使用しない。 って意味でしかありません。 マシン語で~という言い方はさらに正しくありません。 マシン語とか言ったらハンドアセンブルなりして16進の羅列になりますよ。 せいぜいアセンブリ言語じゃないですかね? んで、掲示されているのはただのC++言語です。 VS2012がインストールされていない環境で動かない。 ってのは既に回答されているようにランタイムライブラリがインストールされていないからです。 VSのバージョン毎にインストールが必要になるもので…毎回こういう質問が出てくるくらいおなじみなネタです。 んで、やはり既に回答がありますが、「デバッグ版」は他の環境へ持って行くのは正しくありません。 # DLLだけコピーして~とかやろうとする人もいますが、デバッグ版のDLLを勝手に他のマシンにコピーするのはライセンス上問題があったかと。 リリース版でビルド(添付画像でReleaseを選択してビルド)して、対象PCにはランタイムを別途インストールする。 と言うのが正しいです。
- maia55jp
- ベストアンサー率61% (327/535)
やりたいことは、ネイティブプログラミングじゃなくコンソールアプリじゃないかと Win用のネイティブプログラミングだと意味が違ってきますし、C++解説本の様なので コンソールアプリで問題無いかと・・・ VC++入門 コンソールアプリケーションの作成(バージョンが古いですが) http://mcn-www.jwu.ac.jp/~yokamoto/openwww/cpp/introvcppc/ マシン語とは、本当に16進数を書き込んでいく形になり、一般的にはマシン語と対になる アセンブリ言語を使用します。 インラインアセンブラで学ぶアセンブリ言語 第1回 http://codezine.jp/article/detail/393 最近、Java中心なので何ともなのですがコンソールアプリだとMSVCP110D.dllは不要なはず・・
- neKo_deux
- ベストアンサー率44% (5541/12319)
> 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.aspx?id=30679 | Visual C++ 再頒布可能パッケージは、Visual Studio 2012 を使用して開発されたアプリケーションを Visual Studio 2012 がインストールされていないコンピューター上で実行するために必要な、Visual C++ ライブラリのランタイム コンポーネントをインストールします。 > 「コンピューターに MSVCP110D.dll がないため、 VC++6.0とかの話だと、△△△D.dllはデバッグ用のdllです。 通常のVC++ランタイムをインストールしても、デバッグ用のランタイムまでは入りません。 リリース用の実行形式を使ってください。
お礼
neKo_deuxさん、ご親切な回答ありがとうございます。 私の理解不足を痛感しました。「Visual C++ 再頒布可能パッケージ」の文言は何度か目にしたことがありますが、全く気にしていませんでした。 VC++ で作成したモジュールをそのまま配布(コピー)すれば動くのだと思い込んでいました。 ご親切に感謝します。
- masatsan
- ベストアンサー率15% (179/1159)
それってマシン語じゃないんだけど。 VCでマシン語書きたければ、本当にマシン語で書かないとだめじゃないの? VCなので当然ランタイムが必要になります。
補足
masatsan、回答ありがとうございます。Visual Studio は、Microsoft で唯一のネイティブ コード(マシン語)の作れるIDEと言われています。VC++は、.NetFramework 用のCLI(masatsanの言われるランタイム)を利用したアプリケーション開発用としての利用が主流ですが、アンマネージのC環境も含まれており、マシン語プログラムも作れる特徴が1つの売りになっていると解釈しています。このことは、有名な『猫でもわかる・・・』にも記載されており、間違いないと思います。 ネイティブ コードに挑戦するのは、初めてなので、私も経験がありません。
お礼
okgoriponさん、ご親切な回答ありがとうございます。 私の理解不足を痛感しました。「Visual C++ 再頒布可能パッケージ」の文言は何度か目にしたことがありますが、全く気にしていませんでした。 VC++ で作成したモジュールをそのまま配布(コピー)すれば動くのだと思い込んでいました。 ご親切に感謝します。