| 
    
     |  | ▼DULLさん: >▼ひよひよさん:
 >
 >>ということですが、CrystalCPUID.exe だけ最適化でも OK だったりしませんか?
 >両方の最適化をOFFにしないとダメです。
 ふむふむ。
 
 >>なんにせよ、次回リリースからは最適化オフで出したいと思います。
 >個人的には最適化ON/OFFの両方を公開する方が良いと思います。
 >OFFバ〜ジョンは頻繁にバ〜ジョンアップしないで確認用とか。
 それも一案ですが・・・。
 
 >スタックが狂っているようなので原因を考えると
 >・アセンブラでPUSH/POP等を間違っている。
 >・呼び出し規約の_stdcallと_cdeclが間違っている。
 呼び出し規約までは考えてことがありませんでした。
 ありそー。
 
 >後者を疑って/Gz(強制 _stdcall使用)を試しました。
 >CrystalCPUID.exe は libpng の仕様でビルド失敗。
 >SysInfo.DLL は /Gz を通過したので実行してみました。
 libpng をはずせばうまく動いたりするんでしょうか?
 #define USEPNG
 あたりをコメントアウトして、libpng のリンクをやめれば
 PNG サポートをオフにできるかと思います。
 この状態で、最適化してもうまく動くんであれば、libpng を
 使うのを辞めて、GDIPlus に切り替えるという方針も・・・。
 
 >結果は起動中に「ページ違反」が発生。
 >アドレスがいつもの落ちるアドレスと同じだったので
 >もしかしたらこれが原因かも知れません。
 怪しい。
 
 >過去に私も libpng を使った事がありますが
 >ファイル処理で関数ポインタを使う方法があります。
 >このへんで呼び出し規約を間違ったりとか…?
 libpng はずぅ〜っと、前にコンパイルしたものをそのまま
 使っている(セキュリティは???)ので、
 ちょっと考えてもいいのかもしれません。
 
 >libpng のソ〜スを持ってきて -DPNGAPI __stdcall で
 >ビルドして回避できないかと考えたりします。
 >
 >さらに pcidll.c の initialize() の
 >char path[MAX_PATH];
 >
 >これだとパスが245文字以上のフォルダで実行されると
 >path[] にはファイル名も入るのでバッファが
 >オ〜バ〜フロ〜してしまう可能性があると思います。
 >(ファイル名が固定なので確立はかなり低いですが…)
 Windows って 256 文字以上のパスって基本的に実現できないんですよね???
 MAX_PATH は WinDef.h で 260 と定義しているので大丈夫だと信じています。
 
 >ではでは。
 なんだか、神の香りがしてきた今日この頃です。
 一段落したら、Special Thanks コーナーに追加させていただきますね。
 
 libpng は疑ったことが一度もありませんでした。
 この件が解決すれば、今まで動かない〜とレポートしてくださった方の環境でも動くようになるのかも。
 
 
 |  |