tag propiedad c# dll interop call dllimport

c# - propiedad - Función de llamada desde la DLL?



propiedad tag c# (4)

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

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

Así que intento empaquetar esto en una DLL pero no puedo, porque el compilador no sabe qué es SomeMethodInMyProgram ().

Me gustaría usarlo como:

class Program // my program, using DLL { static void Main(string[] args) { Foo test = new Foo(); test.Bar(); } }


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


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

Ejemplo de dll sin dominio de C ++:

using System; using System.Runtime.InteropServices;

Es posible 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);


Llego tarde a la fiesta aquí, pero dejo esta respuesta para alguien que se tira de los pelos como yo. Básicamente, no tenía el lujo de VS IDE cuando enfrentaba este problema. Intentaba compilar el código a través de cmdline usando csc. Para hacer referencia a un dll, simplemente agregue el compilador flag / r: PathToDll / NameOfTheDll a csc.

El comando se vería como

csc / r: PathToDll / NameOfTheDll / out: OutputExeName FileWhichIsReferencingTheDll.cs

En FileWhichIsReferencingTheDll.cs agregue using namespace AppropriateNameSpace; para acceder a las funciones (llamando a class.functionName si está estático o creando un objeto de la clase e invocando la función en el objeto).


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