OLE32 Исключение при закрытии моей службы - PullRequest
1 голос
/ 26 августа 2011

У меня есть приложение-служба, которое аварийно завершает работу только на одном ПК (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 Ответ

1 голос
/ 30 августа 2011

Хм. Это было не так сложно, как я думал - было другое использование IClientTable, похороненного внутри библиотеки, и ReleaseDispatch () не вызывался. Проблема решена.

...