Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Pasar Arrays dinamicos a una DLL (https://www.clubdelphi.com/foros/showthread.php?t=49919)

Sick boy 03-11-2007 13:36:28

Pasar Arrays dinamicos a una DLL
 
Hola,

Debo trabajar con una DLL que tiene una funcion que recibe como parametro un array sin tamaño fijo.

La idea es que a la funcion se le pasa por parametro un array, y te lo devuelve con un numero indeterminado de datos.

La dll creo que esta hecha en visual basic, donde este tipo de array es sencillo de manejar.

Esta es la definicion de la funcion:
function fReportSMSSent(const sDateFrom: WideString; const sDateUntil: WideString;
var aMobiles: OleVariant; var aMessage: OleVariant;
var aDeliveryDate: OleVariant; var aSender: OleVariant): Smallint;

No encuentro la forma de pasar en ese OleVariant un array sin dimension definida.

He probado a pasar la variable como OleVariant, sin más, pero también me devuelve un error la DLL (Parametros de entrada incorrectos).

Conoceis alguna forma de trabajar con este tipo de funciones.

Saludos

MON___ 03-11-2007 19:58:12

¿Seguro que la DLL está hecha con Visual Basic??????

Al González 03-11-2007 21:23:00

¡Hola a todos!

¿Podrías decirnos de donde tomaste esa definición (cabecera) de función? Para ser de una DLL, me parece extraño que no lleve ninguna directiva de tipo de llamada (como "StdCall", "Pascal", etc.), aunque estrictamente no son necesarias.

Pero por otro lado no me da mucha confianza una función que declara parámetros de tipo cadena para valores que aparentemente indicarán fechas (en todo caso el autor pudo haber declarado tales parámetros con el mismo tipo de dato que los demás, OLEVariant).

Una pregunta Sick: ¿qué dice la documentación acerca de esa función? ¿Podrías mostrarnos el código de cómo la llamas y el mensaje de error exacto que te aparece?

Gracias.

Al González. :)

P.D. Me faltó mencionar que con la función VarArrayOf puedes enviar una serie de valores como arreglo Variant / OLEVariant. Saludos.

Sick boy 05-11-2007 09:37:03

Gracias por vuestras respuestas.

Esta es la documentación de la función:
Cita:

fPendingSMS (función)

aBatchID Array Parámetro de salida. Matriz de 1 dimensión.
Rango del Array: inicialmente vacío, devolviendo n – 1 valores
Cada elemento del Array contendrá una cadena de caracteres numéricos con el identificador asociado a un envío pendiente.

aMobiles Array Parámetro de salida. Matriz de 1 dimensión.
Rango del Array: inicialmente vacío, devolviendo n – 1 valores
Cada elemento del Array contendrá una cadena de caracteres con todos los teléfonos móviles asociados a un envío pendiente.
Los números de teléfono irán separados por punto y coma ‘;’

aMessage Array Parámetro de salida. Matriz de 1 dimensión.
Rango del Array: inicialmente vacío, devolviendo n – 1 valores
Cada elemento del Array contendrá una cadena de caracteres con el mensaje de texto asociado a un envío pendiente.

aDeliveryDate Array Parámetro de salida. Matriz de 1 dimensión.
Rango del Array: inicialmente vacío, devolviendo n – 1 valores
Cada elemento del Array contendrá una cadena de caracteres con la fecha asociada a un envío pendiente.
Formato: yyyymmddhhmmss

aSender Array Parámetro de salida. Matriz de 1 dimensión.
Rango del Array: inicialmente vacío, devolviendo n – 1 valores
Cada elemento del Array contendrá una cadena de caracteres alfanuméricos con el remitente asociado a un envío pendiente.

Tipo devuelto:
Integer En caso de éxito de la petición, el valor devuelto será 0.
Para cualquier otro valor entero positivo, consultar códigos de error.

Código error:
500 Parámetros de entrada incorrectos.
520 Error no especificado.

El código de error 500 engloba errores encontrados que pueden implicar desde no declarar los parámetros de entrada como Array hasta también que éstos sean de tamaño fijo y por tanto no modificables por la función internamente.
El error que obtengo es el error 500, y entiendo que sea por los array.
Creo que esto es el problema:
"aMobiles Array Parámetro de salida. Matriz de 1 dimensión.
Rango del Array: inicialmente vacío, devolviendo n – 1 valores"

El parametro de salida es un array inicialmente vacio, pero no se como pasarle ese parametro.

Muchas gracias

Chris 05-11-2007 15:48:04

has intentado pasarle el array como OleVariant?

Sick boy 07-11-2007 11:12:07

Cita:

has intentado pasarle el array como OleVariant?
Si, claro fue lo primero que intenté, y no funcionó.

Tambien he probado a pasarle un array con el numero exacto de elementos que deberia devolver y no funciona.

Y he probado a pasar un array dinamico sin definir el tamaño y tampoco va.

NOTA: Definitivamente, la libreria esta hecha con visual basic

courtois 09-11-2007 03:39:30

Haz usado PSafeArray?


La franja horaria es GMT +2. Ahora son las 21:39:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi