Domanda

Ho un controllo ActiveX scritto in C ++ che viene eseguito in Internet Explorer 8. La maggior parte del tempo (circa 90%) quando è chiuso la scheda o il browser che contiene il controllo, v'è una violazione di accesso in questo modo:

The thread 'Win32 Thread' (0x1bf0) has exited with code 0 (0x0).
Unhandled exception at 0x77b3b9fd in iexplore.exe: 0xC0000005: Access violation reading location 0x65007408.

La violazione di accesso si verifica dopo la chiamata a OnDestroy (), ma prima della chiamata a distruttore del controllo.

L'output di debug, dice:

No symbols are loaded for any call stack frame. The source code cannot be displayed.

Nessuno del mio codice è presente nella stacktrace, anche se forse il cumulo è stato danneggiato in qualche punto in precedenza durante l'esecuzione.

Quali eventi del ciclo di vita fa un controllo ActiveX riceve tra la chiamata a OnDestroy () e distruttore del controllo?

È stato utile?

Soluzione

A quanto ho capito, non v'è strettamente ciclo di vita evento per un ActiveX, dipende dal lato host. Se il controllo è utilizzato con un certo quadro AJAX, per esempio, dopo OnDestroy () può essere chiamato OnCreate () senza chiamare il distruttore. Quindi, assicurarsi che non si dispone di azioni Uninitialize all'interno OnDestroy () del gestore.

È possibile caricare il controllo in ActiveX Control Test Container e giocare con Attiva / Disattiva, forse sarà utile.

Attiva Application Verifier da debug strumenti per le finestre e assicurarsi il vostro debugger download simboli di debug OS . In questo caso analisi dello stack sarà più informativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top