В COM как проверить, что указатель на COM-объект все еще имеет действительный объект на другом конце?
У меня проблема с тем, что следующий бит кода пытается проверить, все ли еще активен указатель m_pServer
, однако, когда приложение, выставляющее этот интерфейс, уничтожено, этот бит кода вызывает сбой приложения. Кто-нибудь может посоветовать, как проверить указатель перед его использованием?
if (FAILED(m_pServer->StillAlive())) { // do something }
Этот код не работает, если m_pServer больше нет в памяти.
EDIT:
ИСКЛЮЧЕНИЕ: Исключение первого шанса на 0x7728fbae (kernel32.dll) в Client40.exe: 0x800706BA: сервер RPC недоступен.
Звонок:
kernel32.dll!RaiseException() + 0x58
rpcrt4.dll!RpcRaiseException() + 0x3e
rpcrt4.dll!NdrProxyErrorHandler() + 0x28
rpcrt4.dll!NdrProxySendReceive() + 0xa4
rpcrt4.dll!NdrProxySendReceive() + 0x119
rpcrt4.dll!NdrComplexArrayMarshall() + 0x26d
--> Client40.exe!SlaveDriver::run() Line 97 + 0x14 C++ //Runs while loop, to handle requests
Client40.exe!DThread::tfunc(void * thisptr=0x0047e694) Line 56 + 0xd C++
Client40.exe!_threadstartex(void * ptd=0x01b20e00) Line 241 + 0xd C
kernel32.dll!BaseThreadInitThunk() + 0x12
ntdll.dll!RtlInitializeExceptionChain() + 0x63
ntdll.dll!RtlInitializeExceptionChain() + 0x36