Динамически P / Вызов DLL - PullRequest
7 голосов
/ 30 июля 2009

Как лучше всего динамически P / вызывать неуправляемый код из .NET?

Например, у меня есть несколько неуправляемых DLL-библиотек с общим экспортом в стиле C между ними. Я хотел бы взять путь к DLL, а затем P / Invoke функцию на основе экспортированного имени. Я не буду знать имя DLL до времени выполнения.

В принципе, что эквивалентно LoadLibrary и GetProcAddress для .NET? (У меня есть существующий код, который использует эти функции для достижения той же цели полностью в неуправляемом коде).

Ответы [ 4 ]

5 голосов
/ 30 июля 2009

В этой статье описывается типобезопасная управляемая оболочка для GetProcAddress, которая должна вам помочь.

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

3 голосов
/ 30 июля 2009

Это можно сделать с помощью P / Invoking в LoadLibrary и GetProcAddress, а затем с помощью Marshal.GetDelegateForFunctionPointer .

Подробнее см. в этой статье .

2 голосов
/ 01 сентября 2009

Также см. это сообщение в блоге от Jonathan Swift title Динамический вызов неуправляемой dll из .net

0 голосов
/ 30 июля 2009

Один из возможных вариантов - создать встроенную функцию, которая отвечает за загрузку соответствующей DLL и функции в память, а затем возвращает эту функцию в управляемый код на основе вашего пути. Таким образом, вы можете использовать трюк GetProcAddress естественным образом и вернуть точку функции. Затем вы можете PInvoke войти в эту функцию и получить делегат, который затем вызовет соответствующую DLL.

...