Вопрос

Как лучше всего динамически 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top