Cómo pasar en FOX un array de 60 enteros a función C definida en una DLL

15/04/2005 - 13:17 por Josep Maria | Informe spam
Hola, tengo el siguiente problema:

Dentro de un programa de Visual FoxPro hemos de pasar un
array
de 60 enteros a una función que está implementada en C
dentro de una DLL y dentro de la función C tratar los datos
del array, cambiándolos y devolver un número. El caso es
que desde dentro de la función C no consigo acceder a los
datos del array y me parece es que los parámetros no los
debo pasar
ó recibir con el formato ó tipo correcto.

En el código FOX para declarar la función C que
utilizaremos que está en una DLL, hacemos así:

DECLARE INTEGER nombre_funcion IN EWSQL.DLL INTEGER @
pDirecciónCamps

La llamada a la función la hacemos así

DIMENSION aNUMEROS[60]
STORE 0 TO aNumeros
nRetorno = nombre_funcion(@aNumeros)


y el código C (simplificando mucho) de dicha función es
así:

int nombre_funcion(int *pArray)
{
return ((int)*(pArray+1));
}

Pues bien, una cosa tan sencilla como esta ya no funciona
pues habría de devolver el segundo elemento del array de
FOX pero siempre me devuelve 0.

Quizás es que en la definición de la DLL se ha de declarar
el parámetro del array de forma diferente ? O en la
llamada no poner el @ ?

Lo he probados de mil formas y no me devuelve el segundo
elemento, siempre devuelve 0.

Que hago mal ? Como se pasa un ARRAY a una DLL ?
 

Leer las respuestas

#1 Int_21
18/04/2005 - 20:43 | Informe spam
Bueno, esta es mi sugerencia, te marco con "<<" los cambios

DECLARE INTEGER nombre_funcion IN EWSQL.DLL INTEGER @
pDirecciónCamps
EXTERNAL ARRAY aNUMEROS[60] && << Agrega la clausa External
DIMENSION aNUMEROS[60]
STORE 0 TO aNumeros
nRetorno = nombre_funcion(@aNUMEROS) &&<<escribe el nombre tal como lo
declarastes

Preguntas similares