トップページ > 過去ログ > 記事閲覧
::CoUninitializeを実行するとアクセス違反が起
名前:eiki` 日時: 2012/11/04 13:14

DXライブラリとCOMを併用すると、 DxLib_End()でアクセス違反が起きることを確認しました。 コメントアウトで抽出していくと、どうやら ::CoUninitialize()を実行するとDxLib_End()内でアクセス違反が起きるようです。 以下再現する最小のソースになります。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( true ); if(DxLib_Init()==-1||SetDrawScreen(DX_SCREEN_BACK)!=0) return -1; ::CoInitialize( NULL ); Sleep(1000); ::CoUninitialize(); DxLib_End(); exit(0); return 0; } ttp://illucalab.com/temp/comtest.zip ちなみに、所持しているWin7機とXP機で挙動が違います。 Win7機ではアクセス違反ではなく、ウィンドウが閉じなくなります(移動も出来ません)。 XP機ではアクセス違反が発生し、強制終了します。 その他、Visual Studioのバージョンは2008です。 何か原因など分かりませんでしょうか。 宜しくお願いします。

Page: 1 |

Re: ::CoUninitializeを実行するとアクセス違反が起 ( No.1 )
名前:管理人 日時:2012/11/05 00:32

乗せて頂いた再現コードを Win7 で実行してみましたところ、DirectSound の Release から出てこなくなっていました DirectX も COM で扱うので、DxLib_End の前に CoUninitialize を呼んでしまうと正常に終了処理が行えなくなるのだと思います DxLib_End の中でも CoUninitialize を呼んでいますので、不都合が無ければ CoUninitialize は DxLib_End に任せてください
Re: ::CoUninitializeを実行するとアクセス違反が起 ( No.2 )
名前:eiki` 日時:2012/11/05 23:19

>DxLib_End の中でも CoUninitialize を呼んでいますので なるほど、DxLib_Endでも呼んでいるのですね。 そもそもDxLib_Init以後ならInitialize自体呼ぶ必要が無さそうですので、該当行をコメントアウトします。 対応ありがとうございました。

Page: 1 |