VC++.NET2003への移行時エラーについて(CMemoryException) – プログラミング – Home

VC++.NET2003への移行時エラ...
 
通知
すべてクリア

[解決済] VC++.NET2003への移行時エラーについて(CMemoryException)


すかっち
 すかっち
(@すかっち)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

こんにちは、質問がありこちらに書き込みさせて頂きます。

現在VC++.NET(2002)からVC++.NET2003への移行をやっています。
しかし.NET2003になった時点でコンパイルエラーが大量に出てしまい困っています。

エラー内容は

①SmClient error C2316: 'CMemoryException' は、デストラクタまたはコピー コンストラ
クタにアクセスできないためキャッチできません。

②SmClient fatal error C1083: include ファイルを開けません。'fstream.h': No such
file or directory

ばかりなのですが、何が悪いのかさっぱりわかりません。どこを修正すればいいのでしょうか。

try {
m_listTable.AddTail(pObjNew);
} catch (CMemoryException /*e*/) {
TRACE(CSmReferenceTables::operator = () : Memory exeption
has been occurred...);
delete pObjNew;
}
     }

①のエラーは上記プログラムの中のCmemoryExceptionで出ています。

どなたか、ご教授よろしくお願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

try {
...
} catch (CMemoryException* e) {
// いろいろと尻拭い
e->Delete();
}

じゃなくて?

> 'fstream.h': No such file or directory

#include <fstream.h> → #include <fstream>


返信引用
wcup2006
 wcup2006
(@wcup2006)
ゲスト
結合: 19年前
投稿: 1
 

1つ目はヘルプでC2316を調べましょう
2つ目はfstream.hの.hをとったらよいと思います


返信引用
すかっち
 すかっち
(@すかっち)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

早速のお返事ありがとうございます。

fstream.hについては解決できました。ありがとうございます!!

しかし一つ目のC2316エラーはヘルプで調べてもさっぱりわからないのです。
何か色んな方法がゴチャゴチャ書いてあるだけで結局どうすればいいのか不明なのです。

②のやつは、↓こう書いてあればヘルプではOKが出るみたいに書いてたのですが、

try {
...
} catch (CMemoryException* e) {
// いろいろと尻拭い
e->Delete();
}

私のプログラムでは } catch (CMemoryException /*e*/) {
になっています。 最後も delete pObjNew; です。

これだけ解決できません。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> これだけ解決できません。

指摘の通りに修正すればよいのでは?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>現在VC++.NET(2002)からVC++.NET2003への移行をやっています。
>しかし.NET2003になった時点でコンパイルエラーが大量に出てしまい困っています。
そもそも元のソースは、.NET2002でも動いていたのでしょうか?
どうもまずそうな気がするのですが。。。

# 丸付き数字は環境依存文字ですので、Web上では使わないようにしてください。


返信引用
すかっち
 すかっち
(@すかっち)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

すでに指摘していただいた方法で修正を行ってみたところ、
更に別の大量エラーが出てきました。

.NET2003は.NET2002とは全く違う性質を持っているのでしょうか?
今まで.NET2002でうまく動いていたのに、大量のエラーが出てくるので
何かリンカに貼り付けたりすればうまくいくんでしょうか??


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> 更に別の大量エラーが出てきました。

例えばどんなものが出ていますか。数によって全ては難しいにしても、いくつか提示されてみては?

> 今まで.NET2002でうまく動いていたのに、大量のエラーが出てくるので

既に Blue さんもご指摘の通り、.NET2002 でもバグに気づいていなかっただけのように見えます。

提示ソースで実際に例外を起こしてみると delete pObjNew; が動かないことがわかると思います。
たまたまコンパイルが通っていただけで、CMemoryException を待ってもそこは通りません。

気づかなかった問題点が表面化したのであれば、地道に直すしかないと思います。


返信引用
すかっち
 すかっち
(@すかっち)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

VC++6.0から.NET化をしたのですが、その時に偶然ちょっと修正しただけで
コンパイルを通ったのかもしれません、皆さんのおっしゃる通りなのかも。。。

ちなみに今回修正を加えて更に大量に出たエラーの一部が下記のようなものです。

m_logFile.open(SMLOG_FILE_NAME, ios::ate);
「SmClient error C2065: 'ate' : 定義されていない識別子です。」

ifstream fi(fname, ios::nocreate);
「SmClient error C2065: 'ifstream' : 定義されていない識別子です。」

m_logFile.close();
「SmClient error C2228: '.close' : 左側がクラス、構造体、共用体ではありません。」

DWORD dwFileSize = file.GetLength();
「SmClient warning C4244: '初期化中' : 'ULONGLONG' から 'DWORD' に変換しました。デ
ータが失われているかもしれません。」

などのエラーが約470件ほど出ています。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

#include <iostream.h> は古い形式のヘッダです。

#include <iostream> など、C++ の現在の標準ヘッダは全て namespace std 内に
標準関数を定義しています。

上記を見る限り、標準ヘッダの直後に以下の文を入れていくと、
かなりのエラーが取れると思います。(提示エラーだと上から3個はこれで消せそうです)

using namespace std;

意味は、C++ の解説書なりを参照してください。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

最後のものは、MFC のバージョンアップに伴うものと思われます。

CFile::GetLength をローカルの MSDN (古いもの)で見ると DWORD ですが、
オンラインでみると ULONGLONG になってます。

どう直すべきかは条件/状況にもよりますので一概にはいえませんが、
下位互換など余計な事を考えなくてよいなら、新しい型にあわせればよいのではないでしょうか。


返信引用
すかっち
 すかっち
(@すかっち)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

ありがとうございます!!

using namespace std; を貼り付けてコンパイルをし直したりしているのですが、
やればやるほどエラーが増えていきます。
地道に1つずつ消すしかやはり方法はにないのですよね^^;


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> 地道に1つずつ消すしかやはり方法はにないのですよね^^;

おそらくは....。


返信引用
すかっち
 すかっち
(@すかっち)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

ありがとうございました、皆さん!

とりあえず地道に1つずつ修正していくところから始めています。
また何か質問が出てきたら書き込みしますので
お力添えよろしくお願いします!!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました