¿Hay alguna manera de llamar a un dll no administrado (no COM) desde la aplicación C #?
-
19-08-2019 - |
Pregunta
¿Hay alguna forma de usar (referencia) una DLL escrita en un C ++ no administrado (no una biblioteca COM) en mi aplicación C #?
Cuando trato de hacer referencia desde Visual Studio, recibo el mensaje de error 'no es un objeto COM'.
¿Tal vez hay algún tipo de traductor \ enrutador que COMIFIQUE mi referencia DLL? No tengo idea de cómo funcionan la interoperabilidad COM y COM, ya que comencé a programar cuando esto ya no era necesario para mí.
Gracias.
Solución
Debe usar el atributo DllImport. Aquí hay un ejemplo de la función Win32 PostMessage:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);
Otros consejos
Ver " Consumir funciones DLL no administradas " tema en MSDN:
http://msdn.microsoft.com/en-us/library /26thfadc.aspx
No es necesario agregar ningún proxy COM, .NET puede consumir archivos DLL directamente utilizando el atributo [DllImport] . También tiene control total sobre la clasificación entre .NET y la DLL no administrada especificando atributos adicionales.
Joe ya respondió esto, así que voy a agregar esto: para ahorrar algo de tiempo y no tener que desenterrar y destrozar firmas de funciones, P / Invoke tiene una biblioteca bastante completa de firmas Win32, en forma de ¡tanto un wiki como un complemento de Visual Studio!
Compruébelo en P / Invoke