Статически включая файлы DLL - PullRequest
2 голосов
/ 13 января 2011

У меня проблема со статическим связыванием DLL-файлов в проекте.Я использую Builder C ++ 6.

I've unchecked:
Project \ Options \ Packages -> Build with runtime packages
Project \ Options \ Linker -> Use dynamic RTL
Project \ Options \ CodeGuard -> CodeGuard Validation

I've also added dll files using Project Manager:
myProject \ Add -> myFile.dll

Конечно, я пересобрал проект после всех изменений, и он все еще запрашивает некоторые DLL-файлы во время выполнения.Что я пропустил?

Ответы [ 3 ]

6 голосов
/ 13 января 2011

Вы не можете связать с DLL, как это. Сначала необходимо создать .LIB, а затем ссылку на него.

Если вы не можете создать .LIB, вы можете использовать .DEF. Прочитайте это или Google.

(между прочим: в Builder C ++ инструменты с такими же или аналогичными именами, как в MSDN)

2 голосов
/ 15 января 2011

Когда вы статически связываетесь с DLL, на самом деле происходит то, что компилятор определяет, какие функции DLL вызывает ваш код, и устанавливает указатели на заглушки, которые компоновщик затем вставляет в таблицу IMPORTS вашего приложения. Во время выполнения, когда ваше приложение запускается, загрузчик ОС сначала исправляет таблицу IMPORTS (среди прочего), загружая в память упомянутые DLL-библиотеки, а затем обновляя указатели функций по мере необходимости. Это происходит до того, как начинает выполняться любой код внутри приложения. Если загрузчик не может разрешить ссылку, он отобразит ошибку и завершит процесс. Сама DLL не скомпилирована в само приложение. Он должен оставаться в виде внешнего файла (чтобы его можно было использовать совместно с несколькими приложениями / процессами, если необходимо) и устанавливать там, где загрузчик ОС может его найти. Вот как библиотеки DLL предназначены для использования. Никакое количество изменяющихся опций проекта не изменит это.

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

0 голосов
/ 13 января 2011

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

...