Клиент .NET, поддерживающий несколько версий неуправляемой DLL - PullRequest
1 голос
/ 28 марта 2011

Я разрабатываю клиент .NET 4.0, который будет использовать библиотеку C для обработки данных. Пользователь сможет указать файл DLL, который он хочет загрузить для обработки.

Я выполняю позднюю привязку / загрузку сборки, как описано здесь. http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

Для каждой DLL те же последовательности вызовов методов будут одинаковыми в моем клиенте, но сигнатуры методов будут меняться или изменяются структуры данных, передаваемые в них. Данные, заполненные структурами, будут отличаться в зависимости от версии DLL и других факторов. Например, определение MyStruct будет меняться в зависимости от версии DLL.

public delegate int INTF_my_method(ref MyStruct pDataStruct);

Какие шаблоны проектирования или проектные решения рекомендуются для этого подхода? Мне нужно загрузить соответствующие делегаты метода C и определения данных на основе версии DLL, указанной пользователем, и соответствующим образом заполнить структуры. Кто-нибудь делал что-то подобное раньше?

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Чистого подхода к этому нет ни в управляемом, ни в собственном коде.Лучшее, что вы можете сделать, это объявить тип интерфейса, который пытается охватить все возможные версии, а затем написать конкретные классы-оболочки для каждой отдельной версии API.Если есть хотя бы какие-то общие функциональные возможности, то вы можете добавить их в базовый класс.

Также примечательно, что вы не можете просто позволить пользователю выбрать DLL, вы должны связать DLL с конкретным экземпляром класса-оболочки.

Создание такой гибкости в вашей программе, очевидно, очень дорого.

0 голосов
/ 28 марта 2011

Вы можете загружать разные версии ваших DLL, но только из отдельных доменов приложений.То есть для каждой DLL, которую вы хотите загрузить, вам нужно будет создать новый домен приложений.

...