Enlace con DLL externa .NET

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:26 PM por David Miralpeix

Enlace con DLL Externa

 

Procedimiento VB6:

- Crear un proyecto con las librerías y funciones a emplear. Es importante asegurarse que está marcado el check de compatibilidad para COM (en Visual Studio).

- Generar la dll y registrarla.

- Llamarla desde el ERP de una forma similar a la expuesta:


  Set lObj = CreateObject ("<NombreLibreria.NombreClase>")

  lObj.<NombreProceso> <Parámetros>


Código ejemplo

Tenemos un proyecto con la siguiente clase:


Public Class Procesos
  Public Sub mensaje()
    MsgBox("MENSAJE A MOSTRAR")
  End Sub

  Public Sub crearPedido(ByVal gcn As Object, ByVal IdCliente As String, ByVal IdArticulo As String, ByVal Cantidad As Double)
    Dim lPed = gcn.obj.dameobjStr("Pedido")
    With lped
      .propiedades("IdCliente") = IdCliente
      .update()
      Dim lLinea = lPed.objetos("Pedido_Lineas").add
      llinea.propiedades("IdArticulo") = IdArticulo
      llinea.propiedades("Cantidad") = Cantidad
      llinea.update()
      .show()
    End With
  End Sub

End Class

Public Class ConexionCargaLib
  Private Shared pCn As Object
  Public Property conexion() As Object
    Get
      Return pCn
    End Get
    Set(ByVal value As Object)
      pCn = value
    End Set
  End Property
End Class


Para llamarla desde el ERP se realizaría de la siguiente forma:


Set lObj = CreateObject ("Prueba_ExternoNet.Procesos")
lObj.mensaje 
lObj.crearPedido gcn, "00001", "0", 25


En este ejemplo se mostraría un mensaje y se crearía un pedido.


Los pasos para generar una dll desde .net y poder utilizarla en el ERP son los siguientes:



  1. Crear  un Proyecto de Biblioteca de Clases en Visual Studio






    

  1. En dicho Proyecto, marcar “Registrar para interoperatividad COM”


    





  1. Una vez generada la dll de VS, copiarla en la carpeta donde está     instalado el ERP, normalmente      


C:\Program Files (x86)\AHORA Freeware ERP\Lib



  1.  Registar la librería de la siguiente forma:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe " C:\Program Files (x86)\AHORA Freeware ERP \lib\NOMBRELIBRERIA.dll" /tlb:NOMBRELIBRERIA.tlb /codebase


En nuestro ejemplo, el Código de la DLL de .NET es el siguiente

 


  1.  Para llamarla desde el ERP sería de la siguiente manera:


Sub Main()
      frmAux.Descargar     'ATENCIÓN: DEBE ESTAR SIEMPRE QUE NO SE MUESTRE EL FORMULARIO.
      Set lPrueba = CreateObject("ClassLibrary1.Class1")
      lPrueba.MensajeDLL  
End Sub


Y el resultado es el siguiente: 


Procedimiento C#:

A partir de la versión 5.0 la referencia la realizamos siguiendo uno de los procedimientos que nos permite C#.

Para este ejemplo crearemos una librería externa (LibreriaExterna.dll) a la que referenciaremos uno de sus métodos.

Primero creamos la propia librería en sí de tipo .NET 6 (anteriormente .NET Core): 


Para este ejemplo creamos sobre la propia librería una clase y un método que lo único que hará será devolvernos el parámetro que le pasemos con texto añadido: 


Importante recalcar que necesitaremos el nombre de la dll, nombre de la clase y nombre del método.

Compilamos para generar la dll y la dejamos en una ruta a la que tengamos permiso y acceso, para este ejemplo en la raíz de C:


El script que creamos para enlazarlo es el siguiente:

namespace AhoraScriptsVacia
{
    public class Script_0 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {
            string dllExterna = @"C:\LibreriaExterna\LibreriaExterna.dll";
            var assembly = System.Reflection.Assembly.LoadFile(dllExterna);
            var type = assembly.GetType("LibreriaExterna.ClaseExterna"); // namespace.clase
            var obj = System.Activator.CreateInstance(type);
            var metodo = type.GetMethod("DameTextoExterno");
            var result = metodo.Invoke(obj, new object[] { "Texto Interno Parámetro" });
            AhoraCore.VBA.Interaction.MsgBox(result.ToString());
        }
    }
}

La ejecución de este script nos devuelve efectivamente el método externo con el parámetro que hemos llamado:


Tengan en cuenta que este es un procedimiento estándar de C# y este tiene todo tipo de posibilidades para conectar con cualquier tipo de DLL.

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo