Hola, soy un principiante en JSL y estoy intentando crear una aplicación JMP para nuestro equipo.
Para hacer esto, me di cuenta de que tengo que cargar c# dll en JSL y llamar a una función desde allí.
He leído la parte de DLL en la guía de secuencias de comandos JMP, pero no estoy tan seguro de que pueda aplicarse para .NET dll.
¿Alguien tiene experiencia en cargar .NET dll y llamar a una función desde allí en JSL?
Hola @ejesjh , Intentaré ayudarte aquí.
Lo primero que debe saber es que llamar desde JMP a una DLL (ensamblaje) .NET es un poco más complicado que llamar a DLL nativas porque los ensamblados .NET normalmente no exportan sus puntos de entrada.
Internamente, JMP utiliza el Obtener dirección Proc API de Windows para localizar funciones a llamar. Entonces, la clave para que JMP llame a su código es exportar correctamente el punto de entrada.
Puedo recomendar dos enfoques posibles que puede utilizar para llamar desde JMP a un ensamblado .NET:
1. Utilice uno de los paquetes Nuget disponibles públicamente que permiten marcar métodos para exportarlos. Uno de esos paquetes es DllExport ( https://github.com/3F/DllExport ) Usar ese paquete en particular requiere un poco de trabajo adicional ya que modificará su archivo csproj para agregar el código necesario para habilitar un atributo [DllExport].
Para probar este enfoque, creé una biblioteca de clases de WinForms (.NET Framework). Primero tuve que crear un x64 configuración por defecto Cualquier CPU config no genera una DLL de 64 bits. Luego, utilicé el archivo por lotes proporcionado con ese paquete para agregar la maquinaria DllExport. Luego, exporté un método:
public static class MyExportedClass
{
[DllExport("MyMethod")]
public static void MyMethod()
{
MessageBox.Show("Called into MyMethod");
}
}
Construí el ensamblaje y finalmente usé el siguiente JSL para llamarlo.
myDLL = LoadDLL("C:\MyLibrary\bin\x64\Debug\MyLibrary.dll");
myDLL << Declare Function( "MyMethod" );
myDLL << MyMethod();
2. La otra opción que puedo recomendar es crear una DLL de C++ que sea un intermediario entre JMP y su código C#. La DLL exportaría funciones para que JMP las llame y, dentro de la DLL, usted llamaría a su código C#. Para permitir que el código C++ llame a C#, utilice la función de lenguaje C++/CLI. Esto significa que el código C++ se compila con la opción /clr y hace referencia a ensamblados .NET. Agregaría una referencia a su ensamblado de C# y realizaría llamadas a su código de C#.
Para comenzar en esta dirección, usaría Visual Studio y crearía un nuevo proyecto usando el Biblioteca de clases CLR (.NET Framework) plantilla. Si te quedas atascado en este enfoque, publica lo que has probado y tal vez pueda ofrecerte más orientación.
Espero que esto ayude,
John