FDT: Ayuda con una dll en C++

Tus experiencias con la informática, o fuera de la informática
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

FDT: Ayuda con una dll en C++

Mensaje por Jonny »

Hola

Esto es un poco fuera de tema, por tratarse de C++ y no de AutoIt (así que sorry), aunque tiene algo que ver con AutoIt, porque el objetivo es usar la dll que quiero hacer en C++ con AutoIt.

Quiero hacer una dll al estilo de las APIS de Windows. Creo, que lo mejor para eso, es hacerla con C++. Sabía algo de este lenguaje, y para hacer la dll, he dado un buen repaso estos días a un par de manuales que tenía. Más o menos, me defiendo ahora con C++, pero me parece que lo que pretendo hacer es más complicado de lo que creía, aunque parece sencillo.

La idea es, crear una función en la dll, que reciba el puntero de una estructura creada con AutoIt, y dicha función acceda a la estructura para leer/escribir datos en ella. Estoy haciendo esto con Dev-C++, compilando en C++ (también puede hacerse en C). El código de la función es algo así:

dllimport int __stdcall recibe_estructura(void* puntero)
{
// a partir de aquí no tengo muy claro como seguir el código:
// he probado con algo como:
int num;
num=puntero->1;
// pero obtengo errores.
return 0;
}

Entiendo, que recibiendo el puntero como argumento de la función (en puntero), solo tengo que acceder con él a la estructura.
Suponiendo que la estructura en autoit fuera algo como:
dllstructcreate("int num")

Hice una variable de tipo int, donde intento almacenar el contenido del único miembro de la estructura. Intenté acceder al miembro de la estructura (num) como "1" (->1) porque puede darse el caso, que no se conozca el nombre del miembro al que se quiere acceder. Por ejemplo, si declarásemos con AutoIt la estructura así:

dllstructcreate("int")

En Cualquier caso, no funciona ni haciendo :

num=puntero->1;

ni:

num=puntero->num;

¿Como puedo hacer esto?

No puede ser muy complicado, una vez teniendo el puntero de la estructura, pero llevo ya unos cuantos días dándole vueltas y no hay forma.

Y ya puestos:

Al compilar en C no ocurre; pero si compilo en C++, no se por qué, Dev-c++ me cambia el nombre de las funciones al compilar la dll. Si por ejemplo la función que he hecho se llama Prueba, al compilar la dll, el nombre de esta cambia, a algo como _Z17PruebaPPv (por ejemplo).

¿Como puedo hacer que no se cambie el nombre y la función siga llamándose Prueba con la dll compilada?.

He buscado, pero no he encontrado nada sobre esto tampoco.

Acias,

Salu2!
Responder