アプリケーション終了時にOLE32.dllでアクセスバイオレーションが出る


bigbro  2011-08-20 05:12:06  No: 72868  IP: 192.*.*.*

・環境
Windows7 64bit  VisualStudio2010SP1
ターゲットプラットフォーム:x86 32bit

COMを使用するアプリケーションを終了するときに以下の場所でアクセスバイオレーションが出て怒られます。

ソース:delayhlp.cppの380行目
__delayLoadHelper2内の

pfnRet = ::GetProcAddress(hmod, dli.dlp.szProcName);

と記述してあるところをコールスタックがまず表示します。
VisualStudio2008でビルドしていたときはおきなかった現象なのですが、COMのCoUninitialize周りでリソースの扱いが破綻しているような感じです。その根拠は上のラインで停止させたときにGetProcAddressに渡している変数の以下のような内容からです。


-    dli  {cb=36 pidd=0x59135a1c ppfn=0x591575e4 ...}  DelayLoadInfo
    cb  36  unsigned long
+    pidd  0x59135a1c __DELAY_IMPORT_DESCRIPTOR_ole32_dll {grAttrs=1 rvaDLLName=429088 rvaHmod=5561600 ...}  const ImgDelayDescr *
+    ppfn  0x591575e4 __imp__CoUninitialize@0  int (void)* *
+    szDll  0x58c78c20 "ole32.dll"  const char *
+    dlp  {fImportByName=1 szProcName=0x5913627a "CoUninitialize" dwOrdinal=1494442618 }  DelayLoadProc
+    hmodCur  0x75670000 {unused=9460301 }  HINSTANCE__ *
    pfnCur  0x00000000  int (void)*
    dwLastError  0  unsigned long
-    dli.dlp  {fImportByName=1 szProcName=0x5913627a "CoUninitialize" dwOrdinal=1494442618 }  DelayLoadProc
    fImportByName  1  int
+    szProcName  0x5913627a "CoUninitialize"  const char *
    dwOrdinal  1494442618  unsigned long
-    dli.dlp.szProcName  0x5913627a "CoUninitialize"  const char *
      67 'C'  const char

ソース全体を見せることができないのが難ではありますが、この手の問題が発生する理由の心当たりだけでもご返答いただけると幸いです。

編集 削除
bigbro  2011-08-20 10:23:22  No: 72869  IP: 192.*.*.*

追記ですがDirectShow使ってます。
MicrosoftSDKのv7.1です。

編集 削除