Crear tipo de datos definido por usuario
Hola a todos.
Estamos desarrollando un proyecto en el que comunicamos con una OCX, algunos metodos de esta OCX usan como parametros variables de tipo definidos por el usuario (la OCX esta desarrollada en VB), es decir no son tipos definidos en VFpro
(character,integer,...).
Lo que me gustaria saber es si en VFpro hay alguna forma de definir estos tipos al igual que se definen en otros muchos leguajes, es decir si hay algo parecido a lo que se hace por ejemplo en VB:
public type tprueba
index as integer
estado as integer
fecha as date
modelo as string
unarray() as otrotipo
end type
Este tipo "tprueba" por ejemplo seria el parametro que hay que pasar a la OCX.
Estamos desarrollando un proyecto en el que comunicamos con una OCX, algunos metodos de esta OCX usan como parametros variables de tipo definidos por el usuario (la OCX esta desarrollada en VB), es decir no son tipos definidos en VFpro
(character,integer,...).
Lo que me gustaria saber es si en VFpro hay alguna forma de definir estos tipos al igual que se definen en otros muchos leguajes, es decir si hay algo parecido a lo que se hace por ejemplo en VB:
public type tprueba
index as integer
estado as integer
fecha as date
modelo as string
unarray() as otrotipo
end type
Este tipo "tprueba" por ejemplo seria el parametro que hay que pasar a la OCX.
Estimado Spin:
VFP no permite la utilizaci贸n de tipos definidos por el usuario.
De todos modos es posible llamar a funciones externas que admitan par谩metros estructurales, pero es un poco
complicado.
Esto est谩 en la ayuda de VFP 8
------------------------------------------------------------------------------------------
Archivo: ...SamplesSolutionWinapiSystime.scx
Este ejemplo muestra la llamada a la funci贸n de la API de Windows GetSystemTime. GetSystemTime rellena una estructura de tipo WORD (un entero de 16 bits sin signo) con informaci贸n de la hora del sistema.
Declaraci贸n de la funci贸n C y definici贸n de la estructura
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // direcci贸n de la estructura del tiempo del sistema
);
Esta es la definici贸n de la estructura:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
Llamar a funciones en Visual FoxPro
EL c贸digo de Visual FoxPro pasa una referencia de GetSystemTime a una variable de tipo car谩cter, que se rellena con los valores de tipo WORD.
* Visual FoxPro Code: cmdSystemTime.Click
DECLARE INTEGER GetSystemTime IN win32api STRING @
cBuff=SPACE(40)
GetSystemTime(@cBuff)
Para obtener la informaci贸n de la variable de tipo car谩cter cBuff, el siguiente c贸digo convierte caracteres ASCII de 8 bits del a帽o y mes en variables equivalentes de 16 bits.
THIS.Parent.lblYear.Caption = ALLTRIM(STR(ASC(SUBSTR(cBuff,2)) * 256 + ASC(SUBSTR(cBuff,1))))
THIS.Parent.lblMonth.Caption = MONTH_LOC + ALLTRIM(STR(ASC(SUBSTR(cBuff,4)) * 256 + ASC(SUBSTR(cBuff,3))))
------------------------------------------------------------------------------------------
Las dos 煤ltimas l铆neas te muestran c贸mo preparar una cadena de caracteres que sea equivalente a la estructura que necesitas. En realidad, debes pasa el par谩metro como una posici贸n de memoria (la variable de cadena) constitu铆da como la estructura, pero a bajo nivel.
Para m谩s informaci贸n, en la ayuda de VFP 8, en la solapa "B煤squeda" escribe
Utilizar funciones de la API que requieren punteros a matrices (Ejemplo)
y te traer谩 dos temas que te podr谩n dar una pista.
Saludos cordiales.
Gabriel Dame帽ov
www.gdmsargentina.com.ar
VFP no permite la utilizaci贸n de tipos definidos por el usuario.
De todos modos es posible llamar a funciones externas que admitan par谩metros estructurales, pero es un poco
complicado.
Esto est谩 en la ayuda de VFP 8
------------------------------------------------------------------------------------------
Archivo: ...SamplesSolutionWinapiSystime.scx
Este ejemplo muestra la llamada a la funci贸n de la API de Windows GetSystemTime. GetSystemTime rellena una estructura de tipo WORD (un entero de 16 bits sin signo) con informaci贸n de la hora del sistema.
Declaraci贸n de la funci贸n C y definici贸n de la estructura
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // direcci贸n de la estructura del tiempo del sistema
);
Esta es la definici贸n de la estructura:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
Llamar a funciones en Visual FoxPro
EL c贸digo de Visual FoxPro pasa una referencia de GetSystemTime a una variable de tipo car谩cter, que se rellena con los valores de tipo WORD.
* Visual FoxPro Code: cmdSystemTime.Click
DECLARE INTEGER GetSystemTime IN win32api STRING @
cBuff=SPACE(40)
GetSystemTime(@cBuff)
Para obtener la informaci贸n de la variable de tipo car谩cter cBuff, el siguiente c贸digo convierte caracteres ASCII de 8 bits del a帽o y mes en variables equivalentes de 16 bits.
THIS.Parent.lblYear.Caption = ALLTRIM(STR(ASC(SUBSTR(cBuff,2)) * 256 + ASC(SUBSTR(cBuff,1))))
THIS.Parent.lblMonth.Caption = MONTH_LOC + ALLTRIM(STR(ASC(SUBSTR(cBuff,4)) * 256 + ASC(SUBSTR(cBuff,3))))
------------------------------------------------------------------------------------------
Las dos 煤ltimas l铆neas te muestran c贸mo preparar una cadena de caracteres que sea equivalente a la estructura que necesitas. En realidad, debes pasa el par谩metro como una posici贸n de memoria (la variable de cadena) constitu铆da como la estructura, pero a bajo nivel.
Para m谩s informaci贸n, en la ayuda de VFP 8, en la solapa "B煤squeda" escribe
Utilizar funciones de la API que requieren punteros a matrices (Ejemplo)
y te traer谩 dos temas que te podr谩n dar una pista.
Saludos cordiales.
Gabriel Dame帽ov
www.gdmsargentina.com.ar
