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
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.