¿Cómo Puedo Pasar un Arreglo Entre una DLL de ANSI C y Visual Basic 6?



Software Primario:
Versión de Software Primario: 1.0
Versión de Software Primario Corregido: N/A
Software Secundario: Measurement Studio>>Measurement Studio for Visual C++

Problema:
Cuando trato de llamar una función de ANSI C que llena un arreglo de una DLL que yo mismo creé, colapsa Visual Basic 6 (VB 6). ¿Por qué ocurre el colapso de VB 6 cuando la DLL intenta asignar datos al arreglo que se está pasando de VB 6 a la DLL de ANSI C?


Solución:
ANSI C y Visual Basic 6 (VB 6) almacenan los arreglos de forma distinta, por lo que no puede pasar un arreglo de VB 6 a una DLL de ANSI C de la misma forma que lo haría para una función de VB 6. Debe pasar el arreglo como una referencia al tipo de dato del que el arreglo consiste y posteriormente llamar la función con el primer elemento del arreglo.Por ejemplo:

La función es llamada en la DLL de ANSI C y es declarada como sigue:

int32 __stdcall ReadArray(double readArray[])

El prototipo de para la llamada de la función en VB 6 necesita ser declarado de la siguiente forma:

Declare Function ReadArray (ByRef readArray As Double)

Entonces puede llamar la función en VB 6 con el primer elemento en el Arreglo:

ReadArray(Data(0))


Ligas Relacionadas:

Archivos Adjuntos:





Día del Reporte: 01/11/2008
Última Actualización: 04/21/2009
Identificación del Documento: 4HAEHR9S