Domingo 22 de Diciembre de 2024, 03:03
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual FoxPro
(Moderador:
arielb
) »
Vfp + Com
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Vfp + Com (Leído 2721 veces)
Gaston
Nuevo Miembro
Mensajes: 4
Vfp + Com
«
en:
Lunes 22 de Agosto de 2005, 23:07 »
0
Hola,
Inclui una OCX (desarrollado en VB6) en un form en FoxPro.
En la OCX se encuentra un metodo al cual deseo invocar:
Public Function BioSaveTemplate(ByRef UsrTemplates() As RecordTemplate, ByVal EnrollHandle As Integer, ByVal FingerOrder As Integer, ByVal FingerNumber As Integer) As Long
El primer parametro de la funcion es un array de la siguiente estructura declarada en VB:
Public Type RecordTemplate
Template(1 To TplSize) As Byte ' Template data
FingerN As Integer ' Enrolled finger number
Stability As Integer ' Image stability of this template
Quality As Integer ' Image Quality of this template
Content As Integer ' Image Contents of this template
End Type
Como puedo crear y pasarle la estructura RecordTemplate desde Visual FOX 6?
Muchas gracias,
Gaston.
Tweet
DrakerDG
Miembro activo
Mensajes: 72
Re: Vfp + Com
«
Respuesta #1 en:
Miércoles 31 de Agosto de 2005, 21:31 »
0
Encontre esto en el help de visual fox 6.
Código: Text
Algunas funciones de DLL requieren parámetros más complejos, como estructuras o matrices. Si la función requiere un puntero a una estructura, debe determinar la distribución de la estructura y emularla como una cadena en Visual FoxPro antes de transferirla o recibirla de la función de DLL. Por ejemplo, la función del sistema de Windows GetSystemTime( ) espera un puntero a una estructura formada por ocho palabras o enteros de 16 bits sin signo que indican el año, el mes, el día, etc. La estructura se define de esta forma:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME
Para pasar datos entre Visual FoxPro y la función GetSystemTime( ), tiene que crear un búfer de cadena de 40 bytes (formado inicialmente por espacios) y, a continuación, pasar la dirección de esta cadena a la función para llenarla. Cuando se devuelve la cadena, debe dividirla en trozos de 2 bytes para extraer los campos individuales de la estructura. El siguiente fragmento demuestra cómo podría extraer tres de los campos de la estructura:
DECLARE INTEGER GetSystemTime IN win32api STRING @
cBuff=SPACE(40)
=GetSystemTime(@cBuff)
tYear = ALLTRIM(STR(ASC(SUBSTR(cBuff,2)) * ;
256 + ASC(SUBSTR(cBuff,1))))
tMonth = ALLTRIM(STR(ASC(SUBSTR(cBuff,4)) *;
256 + ASC(SUBSTR(cBuff,3))))
tDOW = ALLTRIM(STR(ASC(SUBSTR(cBuff,6)) *;
256 + ASC(SUBSTR(cBuff,5))))
Para obtener más información, puede examinar el formulario de ejemplo Systime.scx del directorio ...\Samples\Vfp98\Solution\Winapi de Visual Studio. Para ver otros ejemplos de cómo pasar parámetros a funciones de DLL, vea el programa Registry.prg que se encuentra en el directorio ...\Samples\Vfp98\Classes de Visual Studio.
Si los datos con los que está trabajando en Visual FoxPro son una matriz, debe recorrer varias veces la matriz y concatenarlos en una única cadena que representa una matriz de tipo C antes de pasarlos a la función de DLL. Si la función de Windows espera valores de 16 bits o de 32 bits, tiene que convertir los valores a sus equivalentes hexadecimales antes de concatenarlos en una cadena. Cuando pasa la cadena que contiene los datos de la matriz, Visual FoxPro pasa la dirección de la variable de tipo cadena a la DLL, que puede manipularla como matriz. Para ver un ejemplo de esto, vea el formulario de ejemplo Syscolor.scx que se encuentra en el directorio ...\Samples\Vfp98\Solution\Winapi de Visual Studio.
Este es un ejemplo de código de una funsión del API que utilizo con frecuencia
Código: Text
FUNCTION GetPath(nHex) && Numero Hexadecimal
LOCAL sPathP
Declare SHGetSpecialFolderPath In 'shell32.dll';
Long hWnd, String @sPath, Long Folder, Long Create
*Regresa el path de carpetas en el sistema, como:
*Mis documentos (de usuario actual o todos los usuarios)
*Mis imagenes "
*Usuario actual
*Archivos de Programa, etc.
sPathP = SPACE(256) && Tamaño del string en blanco.
= SHGetSpecialFolderPath(1, @sPathP, nHex, .F.) && Llama el valor al API.
*--- NOTA: @variable, pasa el parametro por referencia, es decir para que
*--- sea modificado y retorne su valor.
sPathP = LEFT(sPathP,AT(Chr(0),sPathP) - 1) && Asigna el valor del Path.
RETURN sPathP
ENDFUNC
Saludos desde Guatemala, C. A.
Electrobotics
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual FoxPro
(Moderador:
arielb
) »
Vfp + Com