Página 1 de 1

forzar tipo de datos de variables y/o arrays

Publicado: 25 Ago 2010, 17:22
por Jonny
Hola

¿Hay alguna forma de forzar una variable o array a un tipo de datos concreto?

En otros lenguajes como Python por ejemplo, en los que utilizan el tipo variant, tienen funciones para hacer que una variable sea de un tipo concreto, pero en autoit no he visto nada, salvo Int() String() y compañía, pero no tengo claro que estas funciones hagan esto.

Ya se que no necesito asignar el tipo de una variable, porque autoit lo hace automáticamente, pero estoy haciendo una función para usar una función de una dll que por lo visto requiere que se le pase un array, y hay que pasarle el tipo de dato del array, que ha de ser int, porque es lo que va a almacenar en el array, números...

Total, que he leido que hay que declarar el array como int y no veo como hacerlo en AutoIt. No se si vastará con la función Int(), porque el array ha de estar vacío cuando se le pasa a la dll, es esta la que lo rellena con la información que corresponda.

He visto en la ayuda la función VarGetType() pero no veo ninguna como VarSetType()...
Y ¡me sonaba que pudiera hacerse!

Acias,

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 26 Ago 2010, 08:32
por Ximorro
NO.

:smt003

En AutoIt no, no es que tengas tipo variant y otra cosa (si acaso digamos que TODO es variant), ni que no haga falta declarar tipos, ¡es que no se puede! AutoIT no es un lenguaje tipado, "", 0, 0.0, false son perfectamente equivalentes en una expresión booleana, "20" * "10" da correctamente el valor numérico 200, 2 & 34 devuelve la cadena "234". Los tipos los adecua el propio sistema según el contexto y las constantes (y las constantes tampoco son tan evidentes: 2147483647 es un entero, 2147483648 es un real, aunque no ponga los decimales (no cabe en un entero largo con signo).

Dicho lo dicho, tu problema es diferente, AutoIt realiza montones de conversiones de datos para hacer las operaciones cuando estamos mezclando tipos, por eso es mejor no hacerlo, para que no haga tanto trabajo (es mucho más lento hacer "23" + "12" que 23 + 12), por eso digo que a las funciones hay que pasarles los parámetros en el tipo esperado.
Las funciones DLL no están hechas en AutoIt, están hechas en lenguajes compilados que siempre especifican los tipos claramente, cuando llamas a una DLL desde AutoIT le dices de qué tipo son los parámetros que le estás pasando, así que al decir en la llamada a la DLL el tipo de dato AutoIT hará la conversión si es necesaria:
DllCall("Kernel32.dll", "int", "AttachConsole", "dword", "25")
Pasará "25" al entero sin signo 25.
De la misma manera si ponemos "dword", 25.0 pasará de real a entero sin signo...

Para el array... ¿cómo se pasa un array? Ese es más bien tu problema, y no el tipo. Ciertamente mejor tienes enteros en el array, y sí, con Int() te aseguras de que los valores son enteros, (pasas el array por un bucle que haga $array = Int($array)).
Si para la DLL hay que usar una estructura no será problema, pues hará él la conversión (aunque repito, cuantas menos conversiones tenga que hacer mejor).
Si haces una estructura DLLStructCreate("int[260]") pues tendrás un array de 260 enteros de 32 bits con signo.
No sé si podrás pasarle directamente el array entero con DllStructSetData (me parece que no pero si lo confirma algún experto mejor), aunque desde luego puedes hacerlo elemento a elemento (esta función tiene un parámetro para indicar el índice donde estás escribiendo)
Para pasarlo a la función supongo que habrá que pasarle la dirección, lo puedes hacer con un DllStructGetPtr de la estructura.

Re: forzar tipo de datos de variables y/o arrays

Publicado: 26 Ago 2010, 13:31
por Ximorro
Hum, no sé cómo lo he leído antes que no he visto eso de que tienes que pasar el array vacío. Entonces es más fácil, no tienes que asegurarte de que tus valores son enteros porque no hay valores. Basta con que reserves el espacio para la matriz (lo del struct, supongo) y la pases, la dll ya pondrá los enteros.

Cómo pasar esa matriz quizás dependa de cómo la esté pidiendo la DLL, pero eso ya no tiene nada que ver con declararla en AutoIT, como explicaba en el comentario anterior en AutoIT no hay tipos explícitos.

Re: forzar tipo de datos de variables y/o arrays

Publicado: 26 Ago 2010, 16:14
por Chefito
Ante todo, totalmente deacuerdo con Ximorro :smt001 .
Ximorro escribió:Si haces una estructura DLLStructCreate("int[260]") pues tendrás un array de 260 enteros de 32 bits con signo.
No sé si podrás pasarle directamente el array entero con DllStructSetData (me parece que no pero si lo confirma algún experto mejor), aunque desde luego puedes hacerlo elemento a elemento (esta función tiene un parámetro para indicar el índice donde estás escribiendo)
Para pasarlo a la función supongo que habrá que pasarle la dirección, lo puedes hacer con un DllStructGetPtr de la estructura.
Pues sí. Que yo sepa se deben pasar las estructuras array a las funciones contenidas en una dll por el puntero que apunta a esta estructura.
Como bien dices, se debe hacer por ejemplo $Mi_Estructura=DLLStructCreate("int[260]") si quieres pasarle una estructura con un array de 260 elementos tipo enteros.
Luego se obtendría el puntero: $Mi_puntero_al_array=DllStructGetPtr($Mi_Estructura).
Y finalmente se añade a la función: dllcall(............................................,"ptr", $Mi_puntero_al_array)

En el ejemplo anterior se pasaría un array vacio, que seguramente lo rellenará la función al ser llamada.
Luego, si necesitas recuperar los datos del array, se haría con DllStructGetData. Por ejemplo, DllStructGetData($Mi_Estructura,1) recuperaría el primer elemento del array.

Esto se hace así. No hay que complicarse la vida en intentar hacerlo de otra forma :smt005 .

Otros apuntes interesantes:
Recordar que podemos dar un nombre a la estructura. Por ejemplo: $Mi_Estructura=DLLStructCreate("int Numeros[260]"). Esto es más para organizar el código y confuntirte menos.

También deciros que si necesitais pasarle un valor a alguno de los elementos (o todos) del array, antes de pasarselo a la función, lo podeis hacer con DllStructSetData. En el ejemplo anterior: DllStructSetData($Mi_Estructura, "Numeros", 123). Si lo que le pasais es un array de elementos como valor (3º parámetro), con el cuarto parámetro le podeis indicar el índice del elemento que quereis pasarle.

Otra tema interesante: Que haríamos si necesitamos utilizar una estructura en otra estructura??? (algunas apis lo hacen). No lo he probado nunca, pero supongo que sería definir antes la estructura suplementaria con la función DLLStructCreate, después conseguir su puntero con DllStructGetPtr, y finalmente crear la estructura principal con DllStructCreate, añadiendo el puntero de la estructura suplementaria en el segundo parámetro de DllStructCreate. Supongo que se haga así :smt003 .

Una curiosidad respecto al tema anterior. Hace poco quise definir una estructura que tenía dentro otra estructura definida. En vez de hacer lo anterior, alargé la definición de la estructura principal (vamos, que definí la estructura suplementaria junto a la principal), y funcionó. Supongo que logré conseguirlo porque serían posiciones de memoria consecutivas....digo yo :smt033 .

Todo este rollo es un poco de información para que aprendais algo más los que no saben mucho de este tema.

Con todo lo anterior también le estoy dando la razón a lo que ha dicho Ximorro :smt002 .

Saludos.

Re: forzar tipo de datos de variables y/o arrays

Publicado: 26 Ago 2010, 16:26
por Jonny
Hola

Yo al leer en la documentación de la dll que había que pasar un array de tipo int, pensé en crear una estructura tipo:

Código: Seleccionar todo

DllStructCreate("int array[10]")
Pero preguntándole a otra persona que ha implementado la misma función de la dll en Python, me dijo que no era así, que se refería a un array declarado con el lenguaje que se estuviera programando; osea:

Código: Seleccionar todo

$Array[10]
Como que no se puede declarar como int en AutoIt, pues me tocará probar si cuela, y si no, intentarlo con una estructura. Lo lógico, sería como dices, crear el array normalmente y que la DLL lo rellene con los datos que sea y AutoIt se encargue de tiparlo como corresponda (y es así como me temo que va a funcionar)...
Esqe, la documentación de la dll y la dll... tienen tela para entendérselas con ellas
:)
Ya lo vereis, cuando termine el código, que pondré por aquí...

Gracias Chefito, interesante la info.
Yo empiezo a despegar con el tema de las funciones dll. Empiezo a entender que hacen, como funcionan... pero en apis con cierto grado de dificultad, no es que no sepa implementarlas, porque al fin y al cabo todo es decirle a autoit el tipo de dato y el dato que ha de pasar a la función dll, si no que a veces no entiendo que es lo que tengo que pasarle cuando en la documentación hablan de buffers, punteros a tal cosa, etc.
:)

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 27 Ago 2010, 08:24
por Ximorro
Como que no se puede declarar como int en AutoIt, pues me tocará probar si cuela, y si no, intentarlo con una estructura.
Jo macho, con los rollos que te soltamos los expertos (bueno, a mí el título me lo dieron en una tómbola ;-) )y aún dices esto, porque te lo ha dicho alguien que sabe Python... :smt018
se refería a un array declarado con el lenguaje que se estuviera programando
Eso es absurdo, ¿tú sabes (o tu amigo) cómo organiza internamente en memoria AutoIt sus matrices? ¿coincide con la manera en como se organiza en la dll?
Va a ser que no. Si en Python funciona es porque o el lenguaje hace la conversión, o porque son de la misma manera, pero eso no es para nada general a CUALQUIER lenguaje.
Las DllStruct están precisamente para organizar en binario los datos tal cual se usan en las dll, con los tipos de datos según las normas IEEE para enteros, reales, etc..., además teniendo en cuenta si hay que pasar punteros como 32 ó 64 bits, etc. Y en el caso de las matrices, éstas tienen el espacio reservado de manera continua, si son 32 enteros largos, pues se reserva 32*4 bytes, si son 32 caracteres pues se reservan sólo 32 bytes.
En AutoIt está claro que no puede reservarse así, pues como no hay tipos puedes poner en cada elemento de la matriz lo que te dé la gana, incluso cambiar uno que ya estaba a otro tipo:
Global $vector[2] = [123, "Una cadena"]
$vector[0] = "Cambio el número por una cadena"

Así que a saber cómo son las matrices AutoIT, probablemente sean vectores de punteros, y se va reservando espacio (no necesariamente contiguo) para las celdas según se va necesitando. O puede ser una estructura aún más compleja, a saber.
Conclusión, pon directamente la matriz de AutoIt y nos cuentas, será interesante saber lo que hace, experimentar nunca es malo... después hazlo con la DllStruct... :smt003

Y no te guíes por lo que haga Python, esto no es Python...

Por cierto, yo también doy la razón a Chefito en todo :smt002

Re: forzar tipo de datos de variables y/o arrays

Publicado: 27 Ago 2010, 09:56
por Jonny
Hola

No hombre, no es que le haga caso por que sepa python, cuenta lo que me habeis explicado vosotros, que para algo es de autoit.

No le pregunte por que sepa python, si no porqe conoce bien esa dll, pero no autoit, asi que me dijo como funciona y como lo implemento en python que por lo visto tiene funciones para emular la tipación de variables.

Y si, parece que es lo mismo para la dll un array de autoit que una estructura, por lo que he probado.
Claro que no se como organiza autoit los datos en memoria!.

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 27 Ago 2010, 10:43
por Ximorro
No hombre, no es que le haga caso por que sepa python, cuenta lo que me habeis explicado vosotros, que para algo es de autoit
Ya hombre, si no digo que no nos hagas caso, pero es que me ha hecho gracia que después de soltar los rollos digas que primero probarías a meter la matriz directamente porque así funcionaba en otro lenguaje, y si no ya probarías con el DllStruct...
Y si, parece que es lo mismo para la dll un array de autoit que una estructura, por lo que he probado.
¿Qué quieres decir? No es que sea lo mismo, es que para pasar un array en autoit a una dll hace falta usar las funciones de DllStruc. No son lo mismo, AutoIT está haciendo ahí unas reservas de memoria y unas conversiones de datos para traducir su matriz a la forma que necesita la DLL.
¿Entonces ya te funciona?

Por cierto, una nota lingüística: implementar es escribir el código, pasar un algoritmo a un lenguaje de programación. Así que realmente cuando estamos usando una DLL no la estamos implementando, eso lo ha hecho el que la haya escrito.
No tiene gran importancia pero cuidado porque imagina que distribuyes tu programa y dices que has implementado tal función de DLL, estás diciendo que la has hecho tú aunque no es tu intención, y eso puede causar problemas con el verdadero creador...

Re: forzar tipo de datos de variables y/o arrays

Publicado: 27 Ago 2010, 16:01
por Jonny
Hola
¿Qué quieres decir? No es que sea lo mismo, es que para pasar un array en autoit a una dll hace falta usar las funciones de DllStruc. No son lo mismo, AutoIT está haciendo ahí unas reservas de memoria y unas conversiones de datos para traducir su matriz a la forma que necesita la DLL.
Me refería a que funciona igualmente.
He probado con otra función más sencilla que estaba retocando, y que también me estaba dando algún que otro problema, aunque por otro motivo, y buscando el error, pasé el mismo valor asignado a una variable, y dentro de una estructura, y vi que como decías da lo mismo hacer:

Código: Seleccionar todo

$Variable="Hola mundo"
que

Código: Seleccionar todo

$Cadena="Hola mundo"
$DivString=StringSplit($Cadena, "")
$Struct=StructCreate("char text["&$DivString[0]&"]")
For $I=1 To $DivString[0] Step +1
DllStructSetData($Struct, "text", $DivString[$I], $I)
Next
$PointerStruct=DllStructGetPtr($Struct)
Y pasando "$PointerStruct o $Variable".

Direis, que "Por qué me he complicado tanto con la estructura". Porque resulta, que si hago:

Código: Seleccionar todo

$Struct=DllStructCreate("char text")
DllStructSetData($Struct, "text", "Hola mundo")
con DllStructGetData() solo obtendría "H". No se si es normal o es que hago algo mal, pero para que esté toda la cadena en la estructura es la forma que he encontrado de hacerlo.
Por cierto, una nota lingüística: implementar es escribir el código, pasar un algoritmo a un lenguaje de programación. Así que realmente cuando estamos usando una DLL no la estamos implementando, eso lo ha hecho el que la haya escrito.
No tiene gran importancia pero cuidado porque imagina que distribuyes tu programa y dices que has implementado tal función de DLL, estás diciendo que la has hecho tú aunque no es tu intención, y eso puede causar problemas con el verdadero creador...
Vaya, No, en absoluto era mi intención dar a entender que yo he implementado la dll, ni la función que estoy tratando de esta.
Me refería, a implementar la función que utiliza la dll.

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 27 Ago 2010, 16:44
por Chefito
Puffffff........macho macho maaaachoooo :smt012 .

Pues claro que te va a salir solo la H!!!!! Por que es el primeeeerrrrr byteeeee de la cadena de texto que le pasaaaa!!!!! :smt005 .

Anda y leete mejor los tipos que pone la ayuda en la función DllStructCreate.
Si observas un poquito (no digo mucho.....digo solo un poquito :smt003 ), verás que pone esto en la tabla:
CHAR --> 8bit(1byte) ASCII char
O sea, que el tipo char es de 8 bits (1 byte), un caracter ascii.

Y yo pregunto, que se esa H que te aparece???? Un caracter ascii (1 byte). No te saca más porque no puede almacenar más.
Para almacenar una cadena, simplemente tienes que contar los caracteres que hay (1 byte por cada caracter) y reservar espacio en la memoria en modo matriz.
Te he puesto un ejemplo averiguando el tamaño del string. Si el tamaño es fijo, simplemente cuenta los caracteres y ponlo como elementos en la matriz. En tu caso "Hola mundo" serían 10 elementos.

Código: Seleccionar todo

$texto="Hola mundo que tal estas"	;texto a guardar y mostrar
$sizeString=StringLen($texto)	;tamaño del texto
$Struct=DllStructCreate("char text[" & $sizeString & "]")
DllStructSetData($Struct, "text", $texto)
msgbox(0,"",DllStructGetData($Struct, "text"))
Y respecto a lo de pasarle a la dll el tipo de una forma u otra.......como dice Ximorro, ni caso a tu amigo. Solo se puede pasar de una forma, la correcta, y esta es la que contenga su tipo exacto, que te aseguro que está en la tabla que te he dicho antes. Incluso te digo más, muchas veces, si el tipo no es el correcto, pero tiene más bytes, no vas a tener problemas. Pero lo suyo es intentar pasarle el correcto.

Al trabajar con dlls, AutoIt pasa los tipos al estilo que lo hace C/C++ (creo). Estamos hablando de un lenguaje muy potente con una gran cantidad de tipos. Seguro que están todos los que necesites en tu vida :smt005 .

Por cierto, haznos caso a Ximorro y a mí, que como tu bien sabes yo he creado muchas funciones que atacaban a varias dlls en AutoIt, que es el lenguaje de programación que estás utilizando, no python :smt023 .

Saludos.

Re: forzar tipo de datos de variables y/o arrays

Publicado: 30 Ago 2010, 09:17
por Ximorro
Fíjate Jonny que la manera que te ha puesto Chefito para meter el texto en una estructura es parecido al tuyo, pero mucho más eficiente. Cuando tengas que buscar el tamaño de un texto no hagas un StringSplit, hazlo directamente con StringLen. Y para meter la cadena en la estructura como puedes ver lo haces directamente. O sea que no ibas tan mal pero lo has sobrecomplicado. Puede que para la DLL el string sea un array de caracteres, pero en AutoIT lo puedes manejar directamente, DllStructSetData ya se encarga de ponerlo todo en su sitio, no hay que ir carácter a carácter.

Lógicamente si en vez de un string es un array directamente en AutoIt, como era la consulta original, sí hay que hacer los DllStructSetData para los elementos uno a uno.

Me encanta esta frase: "Solo se puede pasar de una forma, la correcta" :smt003

Re: forzar tipo de datos de variables y/o arrays

Publicado: 30 Ago 2010, 17:42
por Jonny
Hola

Cierto, es más sencillo con StringLen() ahí me colé.

Al fin está terminada la función. Al final era como me suponía, había que hacerlo con estructuras. Me he complicado muchísimo con no se cuantas estructuras ¡a cual más compleja!
:)
pero al final era tan sencillo como:

Código: Seleccionar todo

DllStructCreate("int")
y bueno... la forma de pasarla a la dll ha sido otro show ¡pero al fin está listo!.

Así, que a por otra función, que seguro que aún me queda alguna que otra sorpresa todavía
:)

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 31 Ago 2010, 08:17
por Ximorro
Así que es como suponías... ¡pues haber hecho eso desde el principio, que es lo que decíamos nosotros! :smt003

Pero vamos a ver:
DllStructCreate("int")
¿¿¿DllStructCreate("int")??? ¿Pero no tienes que pasar una matriz? ¿No te hemos puesto varias veces cómo se hace? ¿No te ha explicado Chefito por qué sólo guardaba un char si hacías DllStructCreate("char text") y no toda la cadena?

Pues por eso, por todo esto, DllStructCreate("int") no te está pasando una matriz.

Si te funciona sólo se me ocurre dos cosas, o la matriz resultante es de un solo entero, con lo que cabe en tu "matriz de un elemento", o la estás pasando por referencia, y casualmente el tamaño del puntero es igual al del int (no siempre es así, depende del tipo de S.O.). Falta ver qué datos pones en la estructura o cómo la pasas a la Dll...

Ay que fijarse más...

Re: forzar tipo de datos de variables y/o arrays

Publicado: 31 Ago 2010, 22:04
por Jonny
Hola
¿¿¿DllStructCreate("int")??? ¿Pero no tienes que pasar una matriz? ¿No te hemos puesto varias veces cómo se hace? ¿No te ha explicado Chefito por qué sólo guardaba un char si hacías DllStructCreate("char text") y no toda la cadena?

Pues por eso, por todo esto, DllStructCreate("int") no te está pasando una matriz.
Bueno bueno ...
Resulta, que al final, es que como me digeron que tenía que usar la dll, no funcionaba, al menos en AutoIt (Me aseguraron que en Python sí, pero da igual, porque de Python no tengo ni idea, y estaba programando en AutoIt:)).. Pero al final no me ha servido ni que me digeran como se usaba la función (independientemente del lenguaje).

Además, con tanta estructura, tantas llamadas a la función ... os he mezclao estructuras
:)
¡Sorry!
(Lo digo por DllStructCreate("int"), que no era lo que os preguntaba en un principio).

DllStructCreate("int"), era para el segundo argumento de la función de la dll, para que me almacenara la cantidad de elementos que debía tener el dichoso array. Por supuesto, la estructura es otra. Algo como:

Código: Seleccionar todo

DllStructCreate("int langs[10]")
donde 10 sería lo que almacenara la dll en la otra estructura (donde no hay matriz).

La matriz he de pasarla en una segunda llamada, una vez conozco la cantidad de elementos que ha de tener (que obtengo en la primera llamada).
Si te funciona sólo se me ocurre dos cosas, o la matriz resultante es de un solo entero, con lo que cabe en tu "matriz de un elemento", o la estás pasando por referencia, y casualmente el tamaño del puntero es igual al del int (no siempre es así, depende del tipo de S.O.). Falta ver qué datos pones en la estructura o cómo la pasas a la Dll...
Sí, DlStructCreate("int") lo paso por referencia. Eso es de lo poco que me ha servido lo que me explicó la persona que había usado la función con Python, porque en la documentación pone que ha de ser el puntero a la estructura, pero no que tenga que ser por referencia
:)

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 01 Sep 2010, 08:28
por Ximorro
Dudo mucho que se pida una estructura con un sólo entero, a lo mejor sí pero te aseguro que eso es muy sospechoso, lo normal es que simplemente haya que pasar un entero:
DllCall(....., "int", $entero, ....)
Y si la estructura es por pasar el puntero a entero.... pues tampoco hace falta hacer una estructura, ¡se pasa directamente el puntero!
DllCall(....., "int*", $punteroAentero, ....)

Y todo por no ponernos cómo es la llamada a la función, así veríamos realmente que es lo que necesitas hacer.

¿Lang? ¿lenguajes? ¿Estás por casualidad con eci.dll? Me suena que Chefito hizo una librería para eso...

Re: forzar tipo de datos de variables y/o arrays

Publicado: 01 Sep 2010, 09:41
por Jonny
puffff!...

A ver si lo he entendido...
Por la palabra "langs" sacas el nombre de la dll?.

Entonces eres una máquina, de la astrología además de la programación macho!.

Muy bueno el razonamiento, pero como para llegar a esa conclusión...

Sí, Chefito hizo algunas funciones de esa dll, pero las más imprescindibles. La función ecigetavailablelanguages que era la que me daba problemas no.

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 01 Sep 2010, 19:50
por Chefito
Bueno, decir que solamente veo lógico hacer una estructura de un solo elemento en el caso de querer que la función (api) almacene algún dato en ese elemento al ser ejecutada, que luego podamos querer recuperar. En los demás casos lo veo una tontería.
Jonny escribió:Sí, Chefito hizo algunas funciones de esa dll, pero las más imprescindibles.
Algunas funciones? Las imprescindibles? Mmmmmmm........como recordaba que el código era largo me he molestado en buscar el post y contar las funciones que implementé de esa dll. Ni más ni menos que 16. Y que yo recuerde implementé imprescindibles y no tan imprescindibles :smt003 . Supongo que sea un gran número de las funciones que contiene esa dll (ya ni me acuerdo).
Aaaahhhh, también te recuerdo que implementé las enumeraciones y algunas variables.
Vamos, que a mi parecer la dejé machacada para que si alguien la quisiese completar no le resultase dificil.
Dejé las funciones sin tratamiento de errores, pero eso es facil de hacer.
Jonny escribió:La función ecigetavailablelanguages que era la que me daba problemas no.
Que yo recuerde en ningún momento se habló de esta función en su día :smt017 . Te estará dando problemas ahora, no cuando vimos el eci.dll.
Seguro que no es tan dificil de implementar (o puede que sí, la tendría que ver). Otra cosa es que no sepas por algún motivo :smt021 .

Saludos.

Re: forzar tipo de datos de variables y/o arrays

Publicado: 01 Sep 2010, 20:37
por Jonny
Con las más imprescindibles, me estaba refiriendo a las necesarias para hacer una aplicación "text to speech".
La dll tiene 58 muchas no son necesarias para una aplicación, ni siquiera se utilizarían nunca según en qué aplicaciones, otras facilitan el trabajo de programar aplicaciones con respuesta de voz...
Así, que lo que estoy haciendo es, implementar las que faltan (en realidad he escrito todas)
:)
fijándome en el código de las tuyas...
para tener la UDF completa (o con el mayor número de funciones posibles), porque hay algunas que son bastante retorcidas...

Claro, eciGetAvailableLanguages me da problemas ahora que la estoy implementando, en su día no se habló de ella ¡no sabía ni que existiera! cuando hice el post...

Salu2!

Re: forzar tipo de datos de variables y/o arrays

Publicado: 02 Sep 2010, 08:54
por Ximorro
JE JE JEEEEEEEEEEEEEEEEEEEEEEE
SOY ADIVINOOOOOOOOOOOOOOOO :smt026 :smt035 :smt020 :smt044

Bueno, me lo imaginaba porque ya has hecho varias consultas sobre eso de la librería de sintetizador de voz, suponía que seguías con eso o con lo del reconocimiento de voz o imágenes, que también tenías DLL para eso. Con lo de "lenguajes" me he imaginado que era lo del sintetizador, je, je.

Hombre, lo de la estructura de un elemento no creo que haga falta para que la DLL guarde el valor, con pasarlo con referencia es suficiente...

La famosa eciGetAvailableLanguages creo que está solucionada con lo puesto en este post, no tengo del todo claro los parámetros, pero si trabaja con enumeraciones (los lenguajes) esto es equivalente a enteros, así que hay que pasar un puntero a entero y un puntero a una matriz de enteros. Esas cosas ya se han solucionado en este post.

Ay qué malo que es este Chefito que no ha pasado TODA la dll, ja, ja.
Y digo yo, ¿con esa UDF no has podido hacerlo hablar?

No tengo muy clara la estructura de esa DLL. El caso es que tengo la DLL y un pdf con documentación, pero ¿me podrías pasar algunos otros archivos? por ejemplo el .h, donde supongo que están todas las declaraciones de tipos de datos, el .lib para enlazar, y sería muy interesante ver los .OCX, por otra cosa que te contaré en el otro post que has puesto, porque te vas a encontrar con problemas más graves que punteros a funciones...