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

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

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


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


Ответы (3)


arrow_upward
0
arrow_downward

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

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

arrow_upward
1
arrow_downward

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

person Andrew Keith    schedule 04.10.2009

arrow_upward
0
arrow_downward

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

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

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

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