Как неявно связать dll и ее зависимости без конфликтов?

У меня есть dll A, которая неявно ссылки на dll Z. dll A также явно ссылается на dll B, которая неявно ссылается на dll Z' (другую версию dll Z).

Вот некоторые дополнительные факторы: dll B может располагаться в любом месте системы, ее местоположение сообщается dll A во время выполнения через XML-файл, и она загружается с помощью loadlibrary.

Из-за не зависящих от нас ограничений мы не можем изменить путь среды.

Проблема, с которой я столкнулся, заключается в обеспечении того, чтобы библиотеки DLL A и B использовали правильные версии библиотеки Z dll.

Какие варианты у меня есть?


person dangerousdave    schedule 15.02.2012    source источник
comment
Вы из шланга. Вы не можете загружать две разные версии одной и той же библиотеки неявно (я бы назвал это без использования dlopen), точка точка. Если бы библиотеки не были PIC, потребовалось бы, чтобы два разных набора символов находились в одном и том же виртуальном адресном пространстве, что явно невозможно.   -  person Borealid    schedule 15.02.2012
comment
По сути, ваш единственный вариант - вынести один из двух в отдельный процесс, например, внепроцессный COM-сервер.   -  person Jerry Coffin    schedule 15.02.2012
comment
Спасибо, ребята, если вы опубликуете ответ, я приму его.   -  person dangerousdave    schedule 15.02.2012
comment
Я считаю, что именно для этого был изобретен COM. У вас есть доступ к Essential COM Дона Бокса? Первая глава отлично справляется с постановкой проблемы.   -  person jww    schedule 09.10.2016


Ответы (1)


Вы можете исправить это, изменив манифест одного из двух A или B так, чтобы они оба ссылались на одну и ту же версию Z. Скорее всего, манифест встроен, поэтому вам понадобится инструмент Microsoft Manifest Tool mt.exe, который должен быть доступен с SDK. Это часто происходит, когда вы связываетесь со сторонними инструментами, которые были связаны с другой средой выполнения, чем та, которую вы используете.

person broc    schedule 15.02.2012