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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top