¿Función de llamada desde DLL?


Soy nuevo en C# y estoy tratando de aprender a usar DLL. Estoy tratando de envolver mis objetos en un DLL, y luego usarlo en mi programa.

public class Foo   // its in the DLL
{
   public int ID;
   public void Bar()
   {
      SomeMethodInMyProgram();
   } 
}

Así que trato de empaquetar esto en un DLL pero no puedo, porque el compilador no sabe lo que es SomeMethodInMyProgram ().

Me gustaría usarlo como:

class Program // my program, using DLL
{
    static void Main(string[] args)
    {
       Foo test = new Foo();
       test.Bar();
    }
 } 
Author: Tom Stickel, 2011-02-16

4 answers

Agregue la DLL a través del explorador de soluciones - haga clic derecho en referencias add> agregar referencia y luego "Examinar" a su DLL - entonces debería estar disponible.

 24
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-08 05:10:31

Depende del tipo de DLL. ¿Está construido en. NET ? si es código no administrado, aquí hay un ejemplo de lo contrario, la respuesta de Rob funcionará.

Dll de C++ no administrado ejemplo:

using System;
using System.Runtime.InteropServices;

Puede que necesite usar DllImport

[DllImport(@"C:\Cadence\SPB_16.5\tools\bin\mpsc.dll")]
static extern void mpscExit();

O

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

Entonces cada uno de ellos se llama así:

// a specific DLL method/function call
mpscExit();
// user32.dll is Microsoft, path not needed
MessageBox(new IntPtr(0), "Test", "Test Dialog", 0);  
 31
Author: Tom Stickel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 15:11:21

Necesita cargar el DLL en su aplicación en tiempo de ejecución, por lo tanto, la parte dinámica del DLL. También necesita el archivo de encabezado que define qué funciones están en el DLL para que su compilación sepa qué funciones se han definido. Mi conocimiento aquí se basa en C++ , así que no estoy seguro de cómo funciona esto para C#, pero será algo así...

 4
Author: thecoshman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-16 00:02:08

Llego tarde a la fiesta aquí, pero estoy dejando esta respuesta para alguien que se tira el pelo como yo. Así que, básicamente, no tenía el lujo de VS IDE cuando se enfrentan a este problema.Estaba tratando de compilar el código a través de cmdline usando csc. Para hacer referencia a una dll, simplemente agregue la bandera del compilador /r:PathToDll/NameOfTheDll a csc.

El comando se vería como

Csc /r:PathToDll/NameOfTheDll / out: Archivo OutputExeName que se refiere a la LLL.cs

En Archivo que se refiere a la LLL.cs add using namespace AppropriateNameSpace; para acceder a las funciones (llamando a class.functionName si es estático o creando un objeto de la clase e invocando la función en el objeto).

 3
Author: Abhi7950,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 17:36:40