¿Qué requisitos son necesarios y suficientes para que un control ActiveX se utilice directamente en una hoja de cálculo de Excel?

 C Programming >> Programación C >  >> Tags >> Excel
¿Qué requisitos son necesarios y suficientes para que un control ActiveX se utilice directamente en una hoja de cálculo de Excel?


El artículo de soporte de Microsoft Office "Agregar o registrar un control ActiveX" dice:



Sin embargo, no puedo encontrar documentados en ninguna parte los requisitos que son necesarios y suficiente para que un control se use directamente en una hoja de cálculo.


Creé un nuevo Proyecto C++/ATL, al que agregué un Control ATL, aceptando los valores predeterminados en todo momento. Después de compilar, generar y registrar el control, aparece en la lista de "Más controles" de Excel (a la que se accede desde Desarrollador> Insertar> Controles ActiveX> Más controles...) pero al intentar insertarlo en la hoja de trabajo se ve este mensaje "No se puede insertar el objeto". " error.


¿Qué cambios debo hacer para solucionar esto?


O


¿Dónde están documentados los requisitos de Excel para los controles ActiveX?



Por lo que vale, he verificado que el control generado por el asistente funciona bien (probado con ActiveX Control Test Container, que construí a partir del paquete de muestras de Visual C++ 2008).


Además, soy consciente de que la documentación de la pestaña "Apariencia" del asistente de Control ATL describe la casilla de verificación "Insertable" de la siguiente manera:



Sin embargo, esta casilla de verificación (que simplemente agrega la subclave "Insertable" al registro), solo hace que el control aparezca en el cuadro de diálogo Insertar> Texto> Objeto; para evitar dudas, probé con y sin esta opción marcada y el se produce el mismo error de cualquier manera.


Actualmente estoy comparando rastros de las rutas de ejecución de Excel cuando intento insertar mi control contra eso cuando intento insertar un control de trabajo (Forms 2.0). La diferencia clave parece estar en VBE7.dll mientras se carga la biblioteca de tipos (que el visor de objetos OLE/COM puede cargar correctamente desde mi archivo DLL; sin embargo, después de que Excel haya realizado todas las mismas lecturas, se cancela antes de escribir un EXD )... Estoy investigando en algún ensamblaje en este momento con la vana esperanza de resolverlo, pero seguramente alguien ¿Quién ha creado un control de trabajo para Excel y sabe lo que me estoy perdiendo puede evitarme este dolor?




Microsoft Windows 10 Pro v1511 (10.0.10586.164) de 64 bits

Microsoft Excel 2016 MSO (16.0.4312.1000) de 64 bits

Microsoft Visual Comunidad de Studio 2015 (14.0.24720.00 Actualización 1)


Algunas respuestas de código


CSample() {
CTrace::SetLevel(4);
HRESULT OnDraw(ATL_DRAWINFO&
di) {
const CComQIPtr<IOleInPlaceSiteWindowless>
pOleInPlaceSiteWindowless = m_spClientSite;
ATLTRACE(_T("m_spClientSite 0x%p, pOleInPlaceSiteWindowless 0x%p, m_hWnd 0x%08X\n"), m_spClientSite, pOleInPlaceSiteWindowless, m_hWnd);
... Sample.h(118) : atlTraceGeneral - m_spClientSite 0x0000027A9CA7B460, pOleInPlaceSiteWindowless 0x0000000000000000, m_hWnd 0x0105069C ... Sample.h(118) : atlTraceGeneral - m_spClientSite 0x0000027A9CA7B460, pOleInPlaceSiteWindowless 0x0000000000000000, m_hWnd 0x0105069C