喫茶XRAYトップページ

[スレッド全体
]

[12335] Re6:DLL内の関数で発生した例外の捕捉返信 削除
2018/9/22 (土) 17:56:23 Mr.XRAY
▼ takaさん

> コードを1回チェックに修正したらでなくなりました。
> 落ちていた原因がUniqueStringではなかったみたいです。
> 違うところで落ちてたみたいです。


ゴメンナさい.私のミスです.こちらでも例外発生しなくなりました.
プロジェクトのビルド (再構築) を忘れていました (汗)

>
>      if (PChar(LErrStr) = PChar(E.Message)) then
>          Memo1.Lines.Add(Format('%d %d', [Integer(PChar(LErrStr)),Integer(PChar(E.Message))]));
>      UniqueString(LErrStr);
>
>     Memo1.Lines.Add(Format('%d %s', [Integer(PChar(LErrStr)), LErrStr]));
>
> を別々のところに差し込むとアドレスが変更されたのがわかります。


なるほど,こういうコードにすればいいですね.


[12340] Re7:DLL内の関数で発生した例外の捕捉返信 削除
2018/9/22 (土) 18:21:43 taka
▼ Mr.XRAYさん
> ▼ takaさん
>
> > コードを1回チェックに修正したらでなくなりました。
> > 落ちていた原因がUniqueStringではなかったみたいです。
> > 違うところで落ちてたみたいです。
>


エラーになった原因は、 win32版のDLLを unicodeのexeに読み込んだため
例外時の内部的な文字列処理関係で アクセス違反になったようです。

いまのところ
 E.Messageをローカル変数代入で
  0による除算 では 読み込み違反は発生しない。
  StrToInt('NG')では、読み込み違反が発生する。
という現象があるのがわかっているので
システム関係のエラーはグローバル的な文字列定数から引っ張ってきているのかな?
と思って調べていますが わかりません。



[▼次のスレッド]
INCM/CMT
Cyclamen v3.82