Come si impone a Excel (2007) VBA di rilasciare riferimenti a un oggetto server COM?Come rilasciare l'oggetto server COM in elaborazione da Excel VBA
Ho scritto un server COM in esecuzione (Single instance DLL) in Visual Foxpro 9 SP2, che viene istanziato dal codice VBA di Excel 2007 sul mio computer di sviluppo. Sembra che Excel abbia un riferimento all'oggetto COM/dll anche se l'ho impostato = Nothing. Questo mi impedisce di ricostruire la DLL a causa di un messaggio "File Access is denito TestCOM.dll" finché non esco da Excel, il che è un dolore ogni volta che voglio apportare una modifica e testarlo.
Ho bollito il codice fino a una semplice configurazione di prova: Il progetto VFP9 (TESTCOM) ha un solo file prg con il seguente contenuto
DEFINE CLASS TestClass As Session OLEPUBLIC
ENDDEFINE
il codice VBA è la seguente:
Sub Test()
Set objTest = CreateObject("TestCOM.TestClass")
Set objTest = Nothing
End Sub
Ho provato a rimuovere il riferimento alla libreria del server COM nel progetto VBA ma questo non fa alcuna differenza. Ho provato con e senza DIMing le variabili oggetto e non fa differenza. Ho provato a creare un nuovo progetto DLL VFP ma il problema persiste.
Se io costruisco l'applicazione/dll VFP come INPROCESS/DLL ed eseguire il codice VBA ottengo questo problema, ma se io costruisco come un OUTOFPROCESS/EXE ed eseguire il codice VBA non ottengo questo problema.
Ho trovato un problema molto simile in COM Object Cleanup tranne che il mio server COM è scritto in Visual Foxpro 9 SP2 mentre quello relativo a C# e l'OP non ha spiegato in dettaglio come hanno risolto il problema quindi non so come aggirarlo; se è possibile.
Per tutti gli altri la lettura di questa discussione in seguito mi sono reso conto che se il progetto è costruito come un fuori di processo (EXE) COM server allora si può ricostruire solo il progetto senza uscire da Excel se non si dispone di un riferimento alla libreria dei tipi in VBA/Excel. – Caltor