C言語を始めよう!
http://www.forest.impress.co.jp/article/2002/10/ …
を使用しています。
NT4/2000/XP で、16 ビットプログラムの実行結果が表示されない
と言う問題は、LSI C-86 Ver.3.30c 試食版をツールを利用して実行するプログラム共通の問題のようです。
CPad for LSI C-86でも、以下のとおり、同様の問題があり、
COMMAND
プログラムで、この問題を解決しようとしています。
phb1122
でも、以前は、
COMMAND
を利用した形跡があります。今は、
PIF ファイルを作成
することで解決しています。
なぜ、このような経緯になったのか詳しく解説していただけませんでしょうか?
*******************************
WindowsNT/2000上の CPad for LSI C-86 で、コンパイルはできるが、実行結果が表示されない
これは LSI C-86 が16ビットアプリケーションであるために起こる現象です。
解決策は、作成した実行ファイルを実行する前に一度、Windows9xとの互換性のために用意されているcommand.comを実行することで回避できます。
CPad での設定方法は、
[設定]ダイアログ-[高度な設定]ページの[以下の設定を変更する(C)]にチェックをしてから、[実行するコマンド(B)]に
%WINDIR%\system32\command.com /c exit > nul
と記述して[OK]ボタンをクリックします。
これでNT/2000上でも LSI C-86で作成した実行ファイルの出力を確認できます。
また、この現象が起こらない場合もあるようですが、どういう環境で起こって、どういう環境で起こらないのかははっきりわかっていません。
***********************
C:\phb1122\phoebe.htm
★ NT4/2000/XP で、16 ビットプログラムの実行結果が表示されない場合について
Windows NT4/2000/XP で、LSI C-86 試食版を使って 16 ビットプログラムを作成して実行した際に、出力結果が表示されず、空欄になってしまう場合があります。この現象についていろいろ調査してみましたが、NTVDM.EXE の動作に原因がありそうというだけで、それ以上がどうしても分かりません。しかし、強制的に MS-DOS プロンプトを起動させられればうまくいくのではと考え、PIF ファイルを作成し、それを介して実行することで、とりあえず出力結果を表示させることに成功しました。メニューの「ビルド(B)」→「PIF を作成して実行(I)」をチェックすることで設定できます。このメニューは、LSI C-86 試食版をコンパイラに設定しているときのみ有効です。
敬具
No.2ベストアンサー
- 回答日時:
>機械が新しくなっても、古いなじんだソフトを使いたいものです。
理解します。しかし、ソフトウェアを取り巻く環境はMS-DOSの時代とはあまりにも変化しています。
メモリやハードウェアへのアクセスは、ユーザープログラムとの間に強くOSが入り込んでいます。
OSを考慮せずにできるプログラミングでは、できることが限られます。
>ボーランドが無料のソフトを提供してくれていると言っても、インストールは、難しそうだし、機能があるだけ操作も複雑そう
実際にインストールされましたか?それほど手順は複雑ではありませんし、
機能は、CやC++の標準規格の範囲内で使用すれば何も違いはないでしょう。
道具を使いこなしてこそ、職人。道具に振り回されて本来の目的を達成できないなら、
それは理屈ではなく、ただのできない言い訳になってしまいます。
C言語を使いこなすことに比べたら、インストールは造作もないことでしょう。
>これなら、なるべく、単純なほうが使いやすいと考えているのです。
「C言語を始めよう! 」は、一発クリックでコンパイル・実行をするためのもので、
LSI-CやBorlandの異なるコンパイル手順を吸収してくれるソフトでしょうから、
設定が完了すれば、どちらも同じ使い方になるはずです。
>世の中色々な考え方をする人がいるので、理屈で、押し込もうとしても、なかなか、うまくいかないものです。
色々な考え方をする人がいることは理解しますが、
単に「楽そう」という考え方では、現実とは向かい合えません。
ハードもソフトも日進月歩です。ハードウェア・OSともにセットで古いものを使用し、
その範囲の中で懐古に浸るなら、今の選択も悪くないと思います。
>プログラムから、直接印刷とかできるんですか?
OSを経由して、OSが提供する口(インターフェース)を使えば印刷は可能です。
それを直接と言わないということでしたら、ほぼできないという回答になります。
#ドライバレベルではやってるので、できないわけではない
いずれにせよ、学習目的ということなら、不具合のある状態ででも、
LSI-Cを使ってみてはどうでしょうか?画面出力の問題もPIFファイルを使う
という方法で逃げることができるところまでわかっているとのことですし。
10数年前のソフトウェアです。エンストを起こしても笑顔で付き合ってあげて下さい。
レスありがとうございます。
プログラム作者から、以下の通りの回答を得ました。
*******************************************
Re: NT4/2000/XP で、16 ビットプログラムの実行結果 ( No.3 )
日時: 2012/07/09 09:16
名前: AOK
2005年頃に深く頭を悩ませた問題ですね。
2000/XP より NT の方で、
高い頻度で発生した現象だったと記憶しています。
当時、Microsoft の資料を読み漁ったり、
まだ会社に NT マシンが何台か残っていたので、
何度も検証を繰り返した覚えがあります。
ご質問の件は、引用の通りで、それ以上のことはありません。
もっとも安定した検証結果が得られた方法を採用しただけです。
CPad さんで採用している方法については初めて知りました。
そういう方法もあったのですね。
No.3
- 回答日時:
それから、「C言語を始めよう!」の作者は、題記の原因について、
「NTVDM.EXEが問題の原因となっていそう」と、おっしゃっていますが、
NTVDM.EXEは、仮想的なMS-DOSマシンをWindows上で再現するもののようです。
結局、作成したソフトウェアは、Windows上のMS-DOSマシンで仮想的に
動作することになるので、ネイティブなMS-DOSと違い、ハードウェアに
直接アクセスすること等はできない(Windowsで許可されない)と思います。
また、LSI-C86 試食版は、Wikipediaによると、
http://ja.wikipedia.org/wiki/LSI_C-86
===
LSI C-86 は商用ソフトであるが、ver 3.3.0のMS-DOS版に対して、サポートしている4つのメモリモデルの中で、スモールモデル(Code Segment、Data Segment に割り当てられるメモリが共に64KB以下のモード)のみしか使用できない、デバッグ機能がないなどの機能制限を課したものを「試食版」としてフリーウェアで配布している。
===
とあり、使用可能なメモリの制約が強く、デバッグ機能もありません。
(デバッガを使いながら、C言語の勉強をすることは、個人的に有効と思います)
具体的には、例えば、配列を使用するために、
double test[100][1000];
とした時点で、使用可能なメモリ容量を超えています。
このような制約からも、学習目的として使うには、ハンデが大きいです。
私からの提案は#1のままです。
No.1
- 回答日時:
64bitが主流になろうとしているこの時代に、なぜに16bit時代のコンパイラを
好き好んで使っているのでしょうか?学習目的であれば、Visual Studio等もあります。
このC言語を始めようは、Borlandのコンパイラもサポートしているようです。
http://www.codegear.com/jp/downloads/free/cppbui …
こちらもサポート等は受けられませんが、まだ32bit用ということで、LSI C-86よりは
互換性という意味で、動作は信用できるのではないかと思います。
クラッシックカーを修理するのが好きならまだしも、クラッシックカーで運転を
習得しようとして、車が動かないと悩んでいるのであれば、普通自動車を買って
練習する方が、効率が良いですよ。
目的が、C言語の習得なら、無料の新しいコンパイラを使いましょう。
それとも、LSI C-86を使ってコンパイルした実行ファイルが必要な状況だったりするんでしょうか。
>hidebunさん、そして、皆さん、こんにちは。いつも回答頂きありがとうございます。
>目的が、C言語の習得なら、無料の新しいコンパイラを使いましょう。
言われていることは、よく分かります。自分も、最後は、提案のかたちになるかも、知れません。
なぜ、と言われたら、少しは、MS-DOSの時代に、LSI C-86 Ver.3.30c 試食版を使ったことがあり、使いやすいのではないかと考えているからです。
機械が新しくなっても、古いなじんだソフトを使いたいものです。
ボーランドが無料のソフトを提供してくれていると言っても、インストールは、難しそうだし、機能があるだけ操作も複雑そう、これなら、なるべく、単純なほうが使いやすいと考えているのです。
世の中色々な考え方をする人がいるので、理屈で、押し込もうとしても、なかなか、うまくいかないものです。
絆創膏と理屈は、どこにでも、ひっつく。
いろんな人が、いるから、それで良いのではないかと考えています。
>それとも、LSI C-86を使ってコンパイルした実行ファイルが必要な状況だったりするんでしょうか。
必要な状況に無くむしろ、不便な状況になりそうです。
プログラムから、直接印刷とかできるんですか?
最近は、色々な印刷機によって、ドライバーが違うし、こんなばらばらなドライバーの要求に合わせて、印刷を直接プログラムから指示するのは、複雑すぎてできないのでは、無いかと考えているのですが、いかがでしょうか?
>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
VB上で実行中の無限ループの止め方
-
Macでのソケットプログラミング...
-
system関数を使用してsuコマン...
-
システム資源とは?
-
ヘッダファイル? malloc.hと...
-
実行中の実行ファイルの上書き
-
バックグラウンドで実行される...
-
実行時エラー429
-
コンソールでの日本語入力について
-
MACで動く実行ファイルをWindow...
-
並列計算をしたときのシステム...
-
なんかC言語でプログラム書いて...
-
VisualStudio でのコンソール・...
-
プリントスクリーンをプログラ...
-
VB.NETで作ったプログラムがサ...
-
以下のプログラムのif文に関し...
-
バックグラウンドからフォアグ...
-
C言語で途中までしか、プログラ...
-
clock関数は正確じゃないの?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
sendkeysにてALT+CTRL+INSERTを...
-
VBAで外部プログラムを非表示で...
-
実行時エラー429
-
並列計算をしたときのシステム...
-
C言語でプログラムを再起動
-
C言語で途中までしか、プログラ...
-
VB上で実行中の無限ループの止め方
-
プログラムを走らせる
-
他のPC上にあるexeを、そのP...
-
Excel VBA から外部プログラム...
-
RPG パラメーターについて
-
他の実行ファイルを実行するプ...
-
Windows10でDOSゲーム
-
プロセス間通信について
-
終了してもプログラムが実行し...
-
アクセス[ファイルを開かずに、...
-
ラズパイ プログラム 自動起動 ...
-
ヘッダファイル? malloc.hと...
-
MACで動く実行ファイルをWindow...
おすすめ情報