Pregunta

¿Cuál es la mejor manera de P / Invocar dinámicamente código no administrado desde .NET?

Por ejemplo, tengo varios DLL no administrados con exportaciones comunes de estilo C entre ellos. Me gustaría tomar la ruta a una DLL y luego P / Invocar una función basada en el nombre exportado. No sabría el nombre de la DLL hasta el tiempo de ejecución.

Básicamente, ¿cuál es el equivalente de LoadLibrary y GetProcAddress para .NET? (Tengo un código existente que utiliza estas funciones para lograr el mismo objetivo, completamente en código no administrado).

¿Fue útil?

Solución

Este artículo describe un contenedor administrado seguro de tipo para GetProcAddress que debería ayudarte.

http://blogs.msdn.com/ jmstall / archive / 2007/01/06 / Typesafe-GetProcAddress.aspx

Otros consejos

Puede hacer esto mediante P / Invoking en LoadLibrary y GetProcAddress, y luego utilizando Marshal.GetDelegateForFunctionPointer .

Para obtener más información, consulte este artículo .

También vea esta publicación del blog de Jonathan Swift title Llamando dinámicamente una dll no administrada desde .net

Una opción que tiene es crear una función nativa que sea responsable de cargar la DLL y la función apropiadas en la memoria y luego devolver esa función a un código administrado según su ruta. De esta manera, puede utilizar el truco GetProcAddress de forma natural y devolver el punto de función. Luego puedes Invocar en esta función y recuperar un Delegado que luego invocará en la DLL adecuada.

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