Может ли DLL связать другую DLL с библиотекой импорта, если первая DLL связана во время выполнения?

Я пишу DLL для аудиоплеера (foobar2000), используя его SDK. Моя DLL связана с другой DLL, и я сделал это с помощью библиотеки импорта (.lib). Однако во время выполнения аудиоплеер жалуется, что в моей DLL (той, которая ссылается на другую) отсутствует зависимость.

Я не знаю, можно ли это обобщить или нет, но если первая DLL компонуется во время выполнения без библиотеки импорта, то может ли она не связываться с другой DLL с библиотекой импорта? И если это действительно так, то почему?


person Community    schedule 04.10.2009    source источник


Ответы (3)


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

person Ahmed Said    schedule 04.10.2009
comment
Спасибо, что предложили обходчик зависимостей. Оказывается, другая моя DLL компилировалась с параметром /MD, из-за чего она искала msvcr90.dll, которую по какой-то причине не удалось найти. Повторная компиляция другой DLL с /MT (которая статически связывает) решила эту проблему. - person ; 05.10.2009

Вы можете связать DLL с любой другой DLL во время выполнения. Правила компоновки DLL те же. Можете ли вы опубликовать имя отсутствующей зависимости? Является ли зависимость правильным каталогом?

person Andrew Keith    schedule 04.10.2009

Когда ОС загружает DLL (и EXE тоже, конечно), она ищет свою таблицу импорта и пытается также загрузить импортированные библиотеки.

Если они не найдены, вы увидите описанную вами ошибку.

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

person elder_george    schedule 04.10.2009
comment
На самом деле я бы использовал Dependency Walker в DLL, чтобы попытаться выяснить, какой импорт не может удовлетворить ОС. - person EFraim; 04.10.2009