PC初心者ですので、見当はずれな質問かもしれませんが、どなたか知恵をかしてください。自宅のPC(Windows Meと一太郎が入っています)にTurbo C++ 4.0 for DOSをインストールしたのですが、「このプログラムで無効な処理が発生したため強制終了されます。・・・。」と表示され詳細を見ると「プログラムが無効な操作を実行しようとしました。」「エラーが起きたアドレス:0000:000B」「サービスへの割り込み:なし」と書いてありますが正直よくわかりません。またPATHの追加も試みたのですがうまくいきません。PCにはMS-DOSプロンプトもあるのですがTurboC++を動かすにはどのような対処が必要ですか?簡単なところから詳しく教えていただけると助かります。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

DOS版TurboC++の統合環境はKEYBIOSやディスプレイBIOSを使っているのでMD-DOSプロンプトでは動作しません。


ちなみに0000:000BはNMI(ノンマスカブルインタラプト)割り込みベクタアドレスの2バイト目でこんな所をアクセスするわけは無いアドレスです(ココは0000:000Aから4バイト単位でアクセスしなければいけない場所です)。
だいたいMS-DOSプロンプトはエミュレーションなので割り込みベクタやBIOSワークエリアを触ったら何が起こるかわかりません(Windowsをフリーズさせる可能性もある)。

と言う事で、他の方がおっしゃるようにBorland C++をお使いになる方がよいでしょう。
Borland C++は16ビットアプリケーションも作成できます。
LSI-C試食版は「ANSI-C準拠」と言いながら多くの部分でANSI-Cの規格を満たしていないのでその辺りを御理解の上ならお使いになってもよろしいかと…。
    • good
    • 0
この回答へのお礼

詳しいご意見ありがとうございます。納得して諦める事ができました。今後どうするかは未定ですがまた何かあったらご意見をうかがおうと思いますので、その時は宜しくお願いします。

お礼日時:2001/04/12 02:17

訂正します


000Aから4バイト(誤)
0008から4バイトまたは000Aから2バイト(正)
失礼しました。
    • good
    • 0

参考までに。


WindowsマシンのDOSは「リアルモード」と「プロテクトモード」のDOSがあります。
Windows上で動くMS-DOSプロンプトは「プロテクトモード」だったと思います。

今回のDOSアプリケーションは「リアルモード」のDOS上で動くものではないでしょうか?

もしそうだとすると、WinMEには「リアルモード」のDOSがありませんので動かないと思います。Win98SEまでなら「リアルモード」のDOSがあります。

詳しくはソフトメーカーに問い合わせた方が良さそうですね。
    • good
    • 0

私も詳しいことはわかりませんが, Turbo系はすごく独自のことをやっていると聞いたことがあります。


また, windowsにのっているDOSプロンプトはDOSの90何%ぐらいしかDOSの機能を再現できていないとも聞いたことがあります。
おそらく高いお金を払ってTrubo C++ 4.0 for DOSを買われたと思いますが, この際Borland C++ Compiler (Windowsプログラムも作れてしまうフリーのコンパイラ)に乗り換えてはいかがでしょうか。http://www.borland.co.jp/cppbuilder/freecompiler …
をごらんいただくか, Cマガジンという雑誌を購入されれば, 付録CD-ROMについてくると思います。あるいは, 16ビットコンパイラがほしいならLSIC86試食版というものがvectorにおいてあります。
ちょっと的外れな回答になりましたが, 参考になれば幸いです。
ちなみにエラーが発生したのは, インストールの段階でですか?
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Qturbo-Cとturbo-C++

プログラミングに関して全くの素人なのに、仕事上、10年以上前のPC-9801、DOS-V上で動いている古いソフトをいじる必要が出てきました。
Turbo-Cなる言語のコンパイラが必要なのですが、これは簡単に手に入るものなのでしょうか?少し調べてみるとturbo-C++forDOSというのがありました。これは10年前のturboCとは全く異なるものなのでしょうか?

Aベストアンサー

DOS上のプログラムでPC-9801、DOS-Vで動いているのであればグラフィックやBIOSコール、割り込みを使っていないはずなので基本的な移植に問題が出る部分は無いと思われます。

ただし…
Tourbo-Cには4.0という恐ろしいバージョンがあって、強烈なバグを抱えたまま出荷されました。
ODS上のプログラムがTurbo-C4.0で開発されたものならバグ回避のためのコードが含まれている可能性が高く、移植時の問題になるかもしれません。

強烈なバグ:
プログラムが64キロバイトを超える配列を使っている場合、64キロバイトの境界線を越える要素のアドレス計算が間違っている。

また、現在のBorlandは当時のBorlandの事業を引き継いでいますが実質的に別の会社です。
旧Borland製コンパイラはANSI-C対応への取り込みやMicrosoft拡張仕様への準拠に甘い部分がありました。
特にMicrosoft拡張仕様はTourbo-C1.0発売以後の策定なので準拠していない可能性があります。

最後に、Tourbo-Cは統合開発環境でしたので同梱のTourbo Debuggerなどのツール用コードが含まれる可能性があります。

DOS上のプログラムでPC-9801、DOS-Vで動いているのであればグラフィックやBIOSコール、割り込みを使っていないはずなので基本的な移植に問題が出る部分は無いと思われます。

ただし…
Tourbo-Cには4.0という恐ろしいバージョンがあって、強烈なバグを抱えたまま出荷されました。
ODS上のプログラムがTurbo-C4.0で開発されたものならバグ回避のためのコードが含まれている可能性が高く、移植時の問題になるかもしれません。

強烈なバグ:
プログラムが64キロバイトを超える配列を使っている場合、64キロバ...続きを読む

QTurboC++のコンパイラ

 教えて下さい。
 TurboC++のコンパイラは今でも手に入るものでしょうか。
 

Aベストアンサー

Borland C++ Suite
http://www.borland.co.jp/bcsuite/
には「Turbo C++ 4.0J for DOS」が入っています。

英語版の古いバージョンでよければ
http://community.borland.com/article/0,1410,21751,00.html
で「Turbo C++ version 1.01」を無償ダウンロードできるようです。

Q構造体の中でユーザー定義型の型を使いたい TurboC → VC++2005

昔、TurboCで作ったソースをVC++2005に置き換えようと難儀しています。
以下、構造体の中でユーザー定義型の型を使いたいのですが、
方法がわからず困っています。
ソースは途中で、コンパイルエラーになりませんが、肝心な所は
コメントになっています。

詳しい方、教えていただけますか?

/* 昔の古い構造体を VC++2005で使いたいです。

typedef struct _Test1{
char key[128];
char val[10];
} Test1;

typedef struct _Test2{
char key[128];
Test1 val[10];
} Test2;

*/


#include <memory.h>
using namespace System;
using namespace System::Runtime::InteropServices;

// テンプレート?でcharやshort型の配列はできるみたいです。
template<typename TYPE, size_t size>
[StructLayout(LayoutKind::Sequential, Size=sizeof(TYPE) * size)]
public value struct native_array{
TYPE elem;
property TYPE default[int] {
TYPE get(int index) {
pin_ptr<TYPE> p = &this->elem;
return p[index];
}
void set(int index, TYPE value) {
pin_ptr<TYPE> p = &this->elem;
p[index] = value;
}
}
};

public ref struct Test1{
String^ key;
native_array<char, 10> val;

Test1(){
key = "test1だよ";
pin_ptr<char> p = &this->val.elem;
array<char>^ data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
pin_ptr<char> dat = &data[0];
memcpy(p, dat, sizeof(this->val));
}
};

public ref struct Test2{
String^ key;
// charやshortなどでなく、ユーザー定義型のTest1の型を
// 配列として10個確保したい
// 記述方法がわかりません。

Test2(){
key = "test2だけど、test1の型を使いたいです。";
// 記述方法がわかりません。
}
};


int main(array<String^>^ args){
Test1 test1;
Test2 test2;

// Test1
Console::WriteLine(test1.key);
for (unsigned i = 0; i < sizeof(test1.val) / sizeof(test1.val[ 0 ]); ++i) {
Console::WriteLine(test1.val[ i ].ToString());
}

// Test2
Console::WriteLine(test2.key);
// 記述方法がわかりません。

return 0;
}

昔、TurboCで作ったソースをVC++2005に置き換えようと難儀しています。
以下、構造体の中でユーザー定義型の型を使いたいのですが、
方法がわからず困っています。
ソースは途中で、コンパイルエラーになりませんが、肝心な所は
コメントになっています。

詳しい方、教えていただけますか?

/* 昔の古い構造体を VC++2005で使いたいです。

typedef struct _Test1{
char key[128];
char val[10];
} Test1;

typedef struct _Test2{
char key[128];
Test1 val[10];
} Test2;

*/
...続きを読む

Aベストアンサー

マネージ型にするなら
public ref struct Test1 {
 String^ key;
 array<char^> ^val;
 Test1(){
  key1 = "Test1だよ";
  val = gcnew array<char^>(10);
  for( int n=0; n < val.Length; n++ ) {
   val[n] = (char)(n + 1);
  }
 }
}

public ref struct Test2 {
 String^ key;
 array<ref struct Test1^> ^val;
 Test2() {
  key = "test2だけど、test1の型を使いたいです。";
  val = gcnew array<ref struct Test1^>(10);
  for( int n = 0; n < val.Length; n++ ) {
   val[n] = gcnew Test1;
  }
 }
}
といった具合の宣言・コンストラクタではないかと思います

main側では
 Test1 test1;
 Test2 test2;
 int n = 0, m= 0;
 Console::WriteLine( test1.key );
 for ( n = 0; n < test1.val->Length; n++ ) {
  Console::WriteLine( test1.val[n] );
 }

 Console::WriteLine( test2.key );
 for ( n = 0; n < test2.val->Length; n++ ) {
  Console::WriteLine( test2.val[n]->key );
  for ( m = 0; m < test2.val[n]->val->Length; m++ ) {
   Console::WriteLine( test2.val[n]->val[m] );
  }
 }
といった具合かと思います
# マネージ開発はあまりしないので間違ってるかも知れませんが

マネージ型にするなら
public ref struct Test1 {
 String^ key;
 array<char^> ^val;
 Test1(){
  key1 = "Test1だよ";
  val = gcnew array<char^>(10);
  for( int n=0; n < val.Length; n++ ) {
   val[n] = (char)(n + 1);
  }
 }
}

public ref struct Test2 {
 String^ key;
 array<ref struct Test1^> ^val;
 Test2() {
  key = "test2だけど、test1の型を使いたいです。";
  val = gcnew array<ref struct Test1^>(10);
  for( int n = 0; n < val.Length; n...続きを読む

QMS-VisualC++:コンパイル後実行をするとDOS窓が一瞬だけ現れて消えるのをずっと表示させたいのですが。

cout << t << endl;

return 0;

}

単に変数を画面に表示させるだけのプログラムなのですが、Build後、実行すると一瞬DOS窓が立ち上がり表示された後すぐ消えてしまいます。この表示したDOS窓を持続させたいときはどうすればいいのでしょうか。おそらくものすごく基本的なことなのでしょうが、Linux上でしかC++をしてないのでわかりません。

Aベストアンサー

!マークのボタンを押して実行したら、

Press Any Key

って出てきて止まりませんでしたっけ?

QTurbo C++2006でGDI+を

Turbo C++2006でGDI+を使用するにはどうしたらいいでしょうか?
PNGを読み込みたくて調べていたのですが、
GDI+を使えみたいに書いてある所もあり
他のHPを見ながら色々試したのですが上手く行きません。
もし知っている方が居られましたら
宜しくお願いいたします。

Aベストアンサー

ボーランド系は全く分らないのですが、回答が無かったので、敢えてレスをつけさせていただきます。

1.OSによるのですが、環境に gdiplus.dll を入れる必要があります。
 (Windows 2000では入ってないです。XPなら入ってます)

2.gdiplus.dll 内の各種機能にアクセスするためのヘッダファイルが必要です。
 MSの開発環境だと、#include <gdiplus.h> が必要ですが...

3.gdiplus の LIB とリンクしておく必要が、たぶん、あります。

結局のところCOMコンポーネントなので、Turbo C++でもVC++でも使い方は変わらないのだと思うのですが、
とりあえず gdiplus で画像を読み込んで表示するだけでも、ちょっとややこしいです。

ズバリ!のサンプルは持ってないんですが、gdiplus で検索すれば、それなりの結果が得られるかと思います。


人気Q&Aランキング

おすすめ情報