关闭我的服务时OLE32异常

时间:2011-08-26 04:05:33

标签: windows com ole

我有一个服务应用程序,只有在通过服务关闭时才能在一台PC(Windows XP)上崩溃。

我在WinDbg上收到以下错误:

(1038.728): Access violation - code c0000005 (!!! second chance !!!)
eax=00000000 ebx=00000000 ecx=0018b7a4 edx=77606e00 esi=0016b7f8 edi=0018b7a4
eip=7750cdbd esp=0012fe78 ebp=0012fe84 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
...
ole32!StringFromCLSID+0x325
ole32!StringFromCLSID+0x2e7
ole32!StringFromCLSID+0x2c9
ole32!StringFromCLSID+0x215
ole32!StringFromCLSID+0x38f
RPCRT4!IUnknown_Release_Proxy+0x11
mfc100+0x20a229
MSVCR100!exit+0x11

我的代码使用某种形式的COM / Ole数据库控件,我这样访问它:

CoInitializeEx( 0, COINIT_MULTITHREADED );

IClientTable    testCDS;
testCDS.CreateDispatch("ClientTableServer.ClientTable");
testCDS.ReleaseDispatch();

<Windows message loop>

CoUninitialize();

如果我注释掉testCDS的使用,就没有崩溃。我尝试过ReleaseDispatch和DetachDispatch的组合,但我仍然遇到同样的问题。

非常感谢帮助。 感谢

1 个答案:

答案 0 :(得分:1)

嗯。这并不像我想象的那么棘手 - 在库中埋藏了IClientTable的另一种用法,并且没有调用ReleaseDispatch()。问题解决了。