名前 題名 ▼ takaさん > ▼ Mr.XRAYさん > > > ASさんと同じで > > > 「Delphiのバグ」という回答が欲しかったのでしょう。 > > > > そうか,そういうことなんですね. > > 気づかないで悪いことしてしまいました.ゴメンナさい (笑) > > > Win32版 エラーになる「無効なポインタ操作.」。 > PChar(E.Message)にすると エラーにはならない。 > > Unicode版 エラーにはならない。 > > EXE(unicode),DLL(win32) アドレス00000000 なんとか違反で 例外処理すら許されない。 > EXE(win32), DLL(unicode) アドレス00000000 なんとか違反。 > > > まとめ(非推奨): DLLの関数から例外を投げる (sharememは使わない場合) > ・どうしても投げたいなら、exe,dll 同じバージョンでコンパイルする > except on E: Exception do > begin > S := E.Message; // この段階では同じアドレスを指している。どちらかの内容が変更されない限り同じアドレスを指す > UniqueString(S); // 新しいアドレスに文字列を複製する > end; > end; > > S := string(PChar(E.Message)); > S := StrUtils.LeftStr(E.Message, Length(E.Message)); > S := Copy(E.Message, 1, Length(E.Message)); > を使っても文字列を複製しなおすことができる > > ついでなので Lazarusでやってみると、 > Stack overflow が発生し 2回以上実行すると暴走。 > > 普通の人は、 > DLLで発生した例外は、きちんとDLL内で処理しよう。外におもらししないこと GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link