0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Library > Bug: Init -> Open -> Close -> Init > モジュール'ntdll.dll'のアドレスXXXでアドレスXXXに対する読取り違反がおきました。

Last updated at Posted at 2017-09-01
動作環境
C++ Builder XE4 (またはVisual Studio Community 2017)
と某ライブラリ

とあるライブラリを使うソフトを開発中にはまった。

用意されたAPI(一部)

  • XXX_Init()
  • XXX_Open()
  • XXX_Close()
  • LoadLibrary()
  • UnloadLibrary()

エラー発生条件

  1. XXX_Init()
  2. XXX_Open()
  3. XXX_Close()
  4. XXX_Init()

モジュール'ntdll.dll'のアドレスXXXでアドレスXXXに対する読取り違反がおきました。

エラーが起きない条件

  1. XXX_Init()
  2. XXX_Init()
  3. XXX_Init()
    ...

以下でもエラーは発生しない。

  1. XXX_Init()
  2. XXX_Open()
  3. XXX_Init()
  4. XXX_Open()
    ...

XXX_Close()の処理で何か問題があるようだ。

対処

案1 XXX_Init()は一回だけ実行する

XXX_Init()を複数回実行しないように上位ソフトを作成する。

それでいいかどうかは上位ソフトの仕様による。

案2 XXX_Init()前にUnloadLibrary()をする

  1. UnloadLibrary()
  2. LoadLibrary()
  3. XXX_Init()
  4. XXX_Open()
  5. XXX_Close()
  6. UnloadLibrary()
  7. LoadLibrary()
  8. XXX_Init()
    ...

上記にてエラーが出ないことを確認した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?