Delphi7で開発したソースをDelphi2005に移行しようとしたところ
実行時に
”EAccessViolation がモジュール vcl70.bplの 0009CCB7 で発生しました。
モジュール'vcl70.bpl' のアドレス 0074CCB7 でアドレス 00000000 に
対する読み込み違反がおきました。”
と言ったエラーが発生してしまいます。
そもそも、vcl70.bplはDelphi7のライブラリですからどこかで
取り込もうとしているのだと思うのですが、特定できませんでした。
どなたかお解りになる方にご教授いただければと思います。
よろしく御願いします。
まず、プロジェクトファイルから以下の物を削除して下さい。
*.dproj
*.proj
*.bdsproj
*.groupproj
*.bdsgroup
*.bpg
*.dcu
※無いものは無視して下さい。
次に、*.dpr をテキストエディタで開き、プロジェクトに不審な物があれば行削除して下さい。
この状態で Delphi で *.dpr を開いてみて下さい。
恐らく、プロジェクトグループファイルにパッケージとして vcl70.bpl が含まれているのだとと思われます。
See Also:
[今更聞けない Delphi のコト (拡張子編)]
http://homepage1.nifty.com/ht_deko/tech025.html
どのような構成のプロジェクトかは分かりませんが,
また,Delphi7とDelphi2005が同じマシンなのか,別なのか,OSはどうなのか
分かりませんが.
拡張子が dpr,dfm,pas 以外のファイルを削除してから起動してみたらどうなりますか.
ただし,リソース(拡張子はres)に何かが含まれている場合は消失してしますので,
再度作成する必要があります.
拡張子が,dof,cfgには,プロジェクトの検索パスなどが入っていますから,
それらが探しにいっているのではないかと思います.
拡張子については以下を参考にしてください.
今更聞けない Delphi のコト (拡張子編)
http://homepage1.nifty.com/ht_deko/tech025.html#tech054
今更聞けない Delphi のコト (フォームファイル編)
http://homepage1.nifty.com/ht_deko/tech032.html#tech061
あっ,スミマセン.
かぶりました(笑)
便乗なんですが、
上記「今更聞けない Delphi のコト (拡張子編)」では
dprは (Delphi プロジェクトファイル - 旧)となっています。
私の環境(D2007)では、dprは削除するとプロジェクトが破綻します。
dprprjで呼んでいるんです。
新規作成で作成したプロジェクトでもこのような構成になります。
これは何かが間違っているせいでしょうか?
それともこれで正しいのであって私の理解が間違っている?
あるいは何かオプションが変更されてそれがデフォルト動作になってしまっているんでしょうか?
かなり以前から疑問(不思議)に思っています。
>私の環境(D2007)では、dprは削除するとプロジェクトが破綻します。
>dprprjで呼んでいるんです。
みたいです.私のところでも同じです.
いちおう,dpr,dprojでもプロジェクトは起動しています.
dprがないと,新規プロジェクト作成になってしまいます.
あ、成る程。dprだけ(dprproj削除)でもプロジェクトは復帰しますね。
逆はダメでした。
因みに、C++Builder2009だと cbproj だけですね。
Delphiとは関係ないで話題で恐縮ですが。
回答ありがとうございました。
> dprは (Delphi プロジェクトファイル - 旧)となっています。
"旧"ではありますが、消しちゃダメなファイルです。
プロジェクトマネージャでプロジェクトのソースを開くと dpr の内容が表示されます。
dpr で uses 等を直接削除しても、dprprj には反映されないため、
dpr をいじったら Delphi を一旦閉じて dprprj を削除、
Delphi を再起動して dprprj を自動再生成しないと同期しない事があります。
# 移行の際には、dpr 以外のプロジェクト/プロジェクトグループファイルは
# すべて破棄し、dpr から読み込ませるのがよろしいかと思います。
皆さんありがとうございます。
助言のおかげで先程のエラーは解消されました。
私のプログラムは一つのexeと2つのbplで構成されています。
exeが2つのbplを呼び出す形態なんです。
EAccessViolationは出なくなったのですが
ログインフォームの後のダイアログが一瞬表示されたかと思うと
どこかに消えて無くなりOKボタンを押す余地すらないまま対応不可能になります。
試しにコードをマスクしてダイアログが出ないようにすると、その後は問題なく
動くようです。このような経験はないでしょうか?
[コード部分]
MessageDlg('認証しました!' + chr(13) + 'ようこそ' + Name + 'さん', mtInformation, [mbOK], 0);
をコールしているだけです。
よろしく御願いします。
ツイート | ![]() |