Acceso a objeto en una DLL

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Acceso a objeto en una DLL

Mensaje por Ximorro »

¡Hola a todos! Tengo una librería cartográfica y me gustaría acceder a ella desde AutoIT, el caso es que no son simplemente llamadas a funciones sueltas como la API de Windows, sino que ésta está en C++ y crea un objeto (bueno, crea muchos, pero con saber cómo se accede a uno...).

Entiendo que no es una librería COM, no está registrada en Windows ni quiero, simplemente quiero instanciar un objeto y llamar a sus métodos, ¿es posible?

Para simplificar supongamos que esta es la librería en C++:

Código: Seleccionar todo

class Clasecita {
private:
	real _a; //un dato privado

public:
	// El constructor
	Clasecita(real a) {
		_a = a;
	}
	
	// El método que quiero llamar
	void Metodo(real b, real& res) {
		res = _a + b;
	}
}
Espero que con la tremenda simplificación que he hecho se entienda y sea suficiente, el caso es que es mucho más complicado, por ejemplo está todo definido en un Namespace, los errores se devuelven con excepciones... espero que eso no afecte. Por si acaso el fuente principal está aquí, el proyecto tiene muchos objetos pero quiero acceder a éste:
http://geographiclib.sourceforge.net/ht ... ource.html

Esta es la página principal de la librería:
http://geographiclib.sourceforge.net/html
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Acceso a objeto en una DLL

Mensaje por Chefito »

Pufffff. No se si me equivocaré, pero creo que las clases solo pueden ser usadas con el lenguaje que se hizo.
Que yo sepa se compilan junto al código.

Para poder utilizar esto tendrías que compilar el código en una libreria COM.

He estado mirando el código y puffffffffff, pasar eso a AutoIt debe de costar :smt024 .

Si sigues adelante suerte con el tinglado :smt021 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Acceso a objeto en una DLL

Mensaje por Ximorro »

¡Vaya hombre! ¿Entonces por qué hacen así la librería? no es tan accesible...
Una pena que no se pueda hacer lo de instanciar objetos que no estén en COM, me temo que pone límites importantes...

En fin, si me animo igual acabo implementándola en AutoIT, pero ciertamente el código es una pesadilla, requiere matemáticas a porrillo y AutoIt no es lo mejor para eso.
No es necesariamente una prioridad porque el programa ya lo tengo funcional. Esto es para proyectar y desproyectar coordenadas (pasar de longitud,latitud en diferentes elipsoides a X,Y en una proyección que se llama UTM) lo que pasa es que el método que he implementado me da una precisión máxima de 2cm en proyección/desproyección en la coordenada Y (la X es precisa al milímetro). Yo lo considero bastante bueno, pero el problema es que esta aplicación independiente da resultados diferentes a lo que da nuestro sistema cartográfico, y los usuarios, que son muy pejigueros, se quejan de que no da lo mismo.
Si ven que les da Y = 4437764.956 y que si me preguntan a mí yo les doy Y = 4437764.973 me dicen que no son iguales ¡aunque "sólo" hay un error de 1.7cm!

El método que usan en esa librería da una precisión de 5nm (¡nanómetros!), a todos los efectos prácticos se puede considerar exacto.
El problema es que éste método necesita calcular series (sumas de infinitos términos), donde cada elemento a sumar tiene coeficientes que ¡son a su vez más series infinitas! (naturalmente lo que se hace es calcular un número determinado de términos, ¡no todos!, pero la cosa es complicada. Además requiere tanto trigonometría circular como hiperbólica, que por supuesto no está implementada en AutoIT, y en la desproyección he visto hasta integrales... una mariconada ;-)
http://arxiv.org/PS_cache/arxiv/pdf/100 ... 1417v1.pdf

Quizás me ponga poco a poco, el código fuente de esa librería será una ayuda inestimable pero pasarlo a ciegas es absurdo, no entenderé nada y me puedo volver loco navegando entre las clases...

Mi programa permite entrar las coordenadas en diferentes sistemas de referencia, representaciones y husos, ¡y actualizo todo en tiempo real mientras el usuario escribe! Queda realmente bonito pero cada vez que se pulsa una cifra se recalcula un montón de cosas con matemáticas más bien intensas, para que os hagáis una idea tengo que actualizar ¡24 texboxes y 4 botones/etiqueta! con coordenadas. Con el método actual es rápido pero aproximado. Con este método cañero será preciso... pero creo que lento...

Para que os hagáis una idea este es el aspecto, aún no está terminado pero el GUI no creo que cambie mucho, quizás añada un botón de cerrar y uno de ayuda...
CambioCoordenadas.png
CambioCoordenadas.png (15.36 KiB) Visto 1940 veces
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Acceso a objeto en una DLL

Mensaje por Ximorro »

Je, está interesante, aunque en esta aplicación en concreto no tiene sentido, quiero decir para el trabajo, quizás más adelante haga algo por practicar.

En este caso es que podría ser contraproducente, por la precisión, nosotros trabajamos en el sistema local ED-50, las coordenadas de Google están en WGS-84 (lo que usan los GPS, por ejemplo), precisamente en el programa uso los dos, aunque sobretodo se usará para cambiar e huso dentro de ED-50. El problema es que el cambio de datum puede tener un error de 1'5m, y eso que uso los parámetros de conversión del IGN específicos para la Península Ibérica. Ese error no parece gran cosa cuando estás tratando con un datum global a nivel planetario como es WGS-84, pero si nuestra ingeniera industrial tiene que dar las coordenadas de un transformador y toma el punto del Google, cuando lo pase al datum local igual se planta en la parcela de al lado... ;-)

Para los delineantes e ingenieros esos botones de"Copia" copian las coordenadas al portapapeles para que sean insertadas en AutoCAD, donde trabajan con nuestra cartografía en ED-50, así ven exactamente dónde están, sin problemas de precisión por cambio de datum.
Para el topógrafo, arquitecto y alguno más que usan el Sistema de Información Geográfica hice una aplicación equivalente que está totalmente integrada con el sistema cartográfico, así que no hace falta la cartografía de Google, ya usamos la nuestra (en realidad sí uso GMAPS, uso StreetView para ver fachadas de edificios a través de consultas sobre nuestra cartografía catastral).

Pero lo dicho, los enlaces no están de más, me los guardo. Para el trabajo no, pero igual para el foro pongo algo, lo que pasa es que en este caso como es tan particular no sé si sería muy útil.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder