5 de diciembre de 2005

Solucionar Error: OLE error code 0x80040112: Appropriate license for this class

Este es un error común al momento de trabajar con algunos ActiveX, veremos la forma de solucionar (o por lo menos darle la vuela)...

Cuando se trabaja con los ActiveX que están incluidos dentro de la distribución de VFP, suele pasar un error justo cuando se ejecuta una línea como la siguiente:
Local loWSock, lcIp
loWSock = CreateObject("MSWinsock.Winsock")
lcIp = loWSock.LocalIP
MessageBox(lcIp)

El código anterior funciona correctamente dentro del IDE de VFP, pero cuando se crea un .EXE y éste tiene algún código donde se crea un objeto por medio de las funciones CREATEOBJECT() , NEWOBJECT(), o por medio del método ADDObject marca el citado error.

Por qué pasa eso?

Este error sucede debido a una restricción de los mismos, que para que funcionen en VFP es necesario que los ActiveX estén embebidos ya sea en un formulario o en una clase heredada de OLEControl.

Cómo solucionarlo

Como comentaba anteriormente, es buena práctica crear clases en donde se tenga embebido dicho control, como un ejemplo aquí tiene un código que hace uso del control MSCommonDialog:
frmMyForm = CREATEOBJECT("Form")

FrmMyForm.AddObject("oleObject1","oleComDialObject")
   WITH FrmMyForm.OleObject1
      .SetOptions()
      .showopen()
      ?.FileName
   ENDWITH

DEFINE CLASS oleComDialObject as OLEControl
    OleClass ="MSComDlg.CommonDialog.1"
    PROCEDURE SetOptions
      #define COMMDLOG_DEFAULT_FLAG 0x00080000
      #define COMMDLOG_RO 4
      #define COMMDLOG_MULTFILES 512

      This.Flags = COMMDLOG_DEFAULT_FLAG + COMMDLOG_RO + COMMDLOG_MULTFILES
      This.FileName = "*.dbf"
      This.filter = "DBF Files|*.dbf"
    ENDPROC
ENDDEFINE

Si deseas mayor documentacion Doug Hennig tiene un documento que explica a mayor detalle el manejo de ActiveX con VFP:

--- Using Visual FoxPro ActiveX Controls (118K) ---
http://downloads.stonefield.com/pub/axsamp.zip

Y también está documentado en el MSDN de VFP como un Bug:

--- BUG: License Error with ActiveX Control Added at Run-Time ---
http://support.microsoft.com/?scid=192693

Espero les sea de utilidad.

Un agradecimiento a Alex Feldstein por el código de MSCommonDialog

Espartaco Palma Martínez

No hay comentarios. :

Publicar un comentario