Динамически P / Вызов DLL
Вопрос
Как лучше всего динамически P / вызывать неуправляемый код из .NET?
Например, у меня есть несколько неуправляемых библиотек DLL с общим экспортом в стиле C между ними. Я хотел бы взять путь к DLL, а затем P / Invoke функцию на основе экспортированного имени. Я не буду знать имя DLL до времени выполнения.
В принципе, что эквивалентно LoadLibrary
и GetProcAddress
для .NET? (У меня есть существующий код, который использует эти функции для достижения той же цели, полностью в неуправляемом коде).
Решение
В этой статье описывается безопасная управляемая оболочка для GetProcAddress, которая должна вам помочь.
http://blogs.msdn.com/ jmstall / Архив / 2007/01/06 / типизированного-GetProcAddress.aspx
Другие советы
Это можно сделать с помощью P / Invoking в LoadLibrary и GetProcAddress, а затем с помощью Marshal.GetDelegateForFunctionPointer .
Подробнее см. в этой статье . р>
Также см. это сообщение в блоге от Jonathan Swift title Динамический вызов неуправляемой dll из .net
Один из возможных вариантов - создать встроенную функцию, которая отвечает за загрузку соответствующей библиотеки DLL и функции в память, а затем возвращает эту функцию в управляемый код на основе вашего пути. Таким образом, вы можете использовать трюк GetProcAddress естественным образом и вернуть точку функции. Затем вы можете PInvoke войти в эту функцию и вернуть делегат, который затем вызовет соответствующую DLL.