¿Cómo llamar a una DLL desde programas externos?

Aplica a: a3ERP
    +1
  • a3ASESOR | business 360

 
En el siguiente artículo veremos los siguientes puntos:

 

Proceso a seguir para llamar a una DLL desde programas externos

A continuación, te explicamos el proceso para llamar a una DLL desde programas externos:

1.- Diseñamos la DLL

Veamos ejemplo básico de una DLL hecha en Delphi con parámetros:
 
dll libreria delphi
 
183684 - arrow move outline rightA tener en cuenta: el procedimiento TestParamsNexus espera un parámetro de tipo “String” que es el que se envía desde Nexus al ejecutar los programas externos.
 
2.- En a3ERP activamos el check "Activar programas externos" desde el punto “Datos generales/ Preferencias/ Activar programas externos”.
 
3.- Configuramos la llamada a la DLL de programas externos desde el punto "Otros/ Mantenimiento de programas externos”, como se muestra en la siguiente imagen.
 
El recuadro azul indica el nombre de la función dentro de la DLL a la que queremos llamar, es importante que las mayúsculas y minúsculas coincidan.
 
mantenimiento de programas externos
 

Aquí hay que tener en cuenta que en ningún momento indicamos el parámetro que se va a pasar a la DLL porque en realidad va implícito con el mantenimiento. Es decir, siempre se pasará un parámetro de tipo “String” que irá variando dependiendo de la tabla que se configure.
 

183748 - alert attention circle exclam Cambios a partir de la versión 14.03:

Hasta la versión 14.03 en el recuadro rojo hay que indicar la ruta completa donde está la DLL a la que queremos llamar y no hace falta que esté registrada en la tabla de dlls.

A partir de la versión 14.03 es obligatorio registrar en la tabla DLL´s de a3ERP, las dlls que se quieran invocar.

276507 - document file from outline pa Para + información sobre cómo se registran dlls en a3ERP consultar el apartado "Registro en a3ERP”.

 

Como a3ERP conoce las dlls  registradas no es necesario indicar la ruta completa y es suficiente con informar el nombre de la dll.
La llamada a “Executables” funciona como siempre.

Veamos un ejemplo:

 mantenimiento programas externos tabla

 

¿Y si mi DLL está hecha en .NET o es un ActiveX?

En el caso de querer llamar a una DLL de .net que se ha registrado con REGASM la manera de informar la DLL es distinta, ya que en programa o librería se debe informar una línea de la siguiente forma:

@NameSpace.ClassName@MethodToCall

 

Un ejemplo sería el siguiente:

@a3ERPExtension.a3ERPExtension@a3ERPExpedientes
 

dll .net

 

183748 - alert attention circle exclam Cambios a partir de la versión 14.03:

Hasta la versión 14.03 no hace falta que esté registrada en la tabla de dlls.

A partir de la versión 14.03 es obligatorio registrar en la tabla DLL´s de a3ERP, las dlls que se quieran invocar.

276507 - document file from outline pa Para + información sobre cómo se registran dlls en a3ERP consultar el apartado "Registro en a3ERP”.

 

Registro en a3ERP

Para que a3ERP sepa que módulos debe cargar, se deberá registrar sus binarios en la tabla DLLS. Esto se puede hacer lanzando una sentencia SQL desde la opción “Vistas SQL”, desde el “Management Studio” de SQL Server o una herramienta parecida, o usando una actualización de un diccionario que forme parte del módulo.

if not exists(select IDDLL from DLLS where DLL = WK.ERP.Ejemplos.LoggerEventosERP)

begin

    declare @id int

    select @id = max(iddll) + 1 from dlls

    insert into dlls(iddll, dll, fabricante, producto, ORDENDEEJECUCION)

    values(@id, WK.ERP.Ejemplos.LoggerEventosERP, WK, a3ERP, 1)

end

 

En el caso de que se opte por la opción del diccionario, debemos recordar que las actualizaciones deben estar diseñadas para que se ejecuten una única vez, como ocurre en el ejemplo anterior. Si no fuese así, podríamos encontrarnos con el registro repetido en la tabla.

Los valores que habrá de indicarse en la tabla DLLS son los siguientes, según sea una dll nativa o COM (hecha en .NET o VB6, por ejemplo):

>> NATIVA

tabla nativa

183684 - arrow move outline rightA tener en cuenta: En el caso de una DLL nativa, el nombre del fabricante y del producto debe corresponder con los directorios dentro de la carpeta extensiones de a3ERP en el que se ubica. 

 

Por ejemplo, si el fabricante fuese WKE y el producto EJEMPLOSERP, el módulo se deberá encontrar en \Extensiones\WKE\EJEMPLOSERP\Binarios

 

Recordemos que la estructura para un módulo de extensión de a3ERP es:


<directorioDelMódulo>

\Binarios: Directorio de los binarios del módulo

\Diccionarios: Directorio que albergará los diccionarios del módulo

\Menús: Ubicación del menú del módulo

Por supuesto, estos directorios son opcionales (pero al menos uno deberá existir).

 

>> COM

 tabla com

 

Las librerías COM deberán estar registradas. Si es nativa conregsvr32 y si es .NET con regasm usando el modificador /CODEBASE.

183684 - arrow move outline rightA tener en cuenta: A diferencia del caso nativo, los campos FABRICANTE y PRODUCTO son libres (no tienen que coincidir con la ruta en la que se ubica, pero es recomendable seguir el mismo patrón).

 

En el caso del valor de DLL, clase COM a instanciar, en el caso de .NET coincide con el nombre completo de la clase (es decir, con namespaces). Generalmente el namespace principal de la biblioteca de clases coincide con el nombre de la DLL, con lo que suele quedar como “nombredllSinExtension.nombreDeLaClase”.
Pero no se debe olvidar que, si se cambia el namespace principal, cambiará el nombre de la clase a registrar.

 

 

    • ¿Te ha resultado útil esta página?
    • ¡Gracias por votar!
    • 1 valoraciones: 4 sobre 4 de media
    • ¿Te ha resultado útil esta página?
    • ¡Gracias por votar!
    • 1 valoraciones: 4 sobre 4 de media