![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- その他(プログラミング・Web制作) プログラムが書けません。 6 2023/01/22 22:58
- Windows Vista・XP windows xp proが起動しなくなりました 10 2022/05/20 00:49
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
C言語で途中までしか、プログラ...
-
sendkeysにてALT+CTRL+INSERTを...
-
プログラムを走らせる
-
ヘッダファイル? malloc.hと...
-
システム資源とは?
-
Vista c言語でのエラー
-
fortran a.exe システムエラー
-
VB上で実行中の無限ループの止め方
-
SendKeysについて
-
並列計算をしたときのシステム...
-
C言語 コマンドラインの文字列...
-
C言語でフォルダを開く
-
実行中の実行ファイルの上書き
-
C言語でプログラムを再起動
-
C言語 fork()について
-
NORTiプログラムのROM化
-
一定時間たつと、リセットしたい
-
VBAで外部プログラムを非表示で...
-
VB6プログラムの実行中でのこと
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
プログラミング ソースコード
-
MACで動く実行ファイルをWindow...
-
なんかC言語でプログラム書いて...
-
sendkeysにてALT+CTRL+INSERTを...
-
他のPC上にあるexeを、そのP...
-
C言語で途中までしか、プログラ...
-
システム資源とは?
-
終了してもプログラムが実行し...
-
VBAで外部プログラムを非表示で...
-
VB上で実行中の無限ループの止め方
-
実行時エラー429
-
RPG パラメーターについて
-
C言語でフォルダを開く
-
プリントスクリーンをプログラ...
-
system関数を使用してsuコマン...
-
並列計算をしたときのシステム...
-
clock関数は正確じゃないの?
-
プログラムを走らせる
-
このプログラミングの問題を教...
おすすめ情報