Перекомпилируйте MFC DLL во время работы exe клиента - PullRequest
2 голосов
/ 24 июня 2010

Можно ли перекомпилировать MFC DLL, когда исполняется ее "клиентский" исполняемый файл, и позволяет ли исполняемый файл обнаруживать и принимать новые изменения?Если это возможно, это глупо?Возможность перекомпилировать DLL без перезапуска исполняемого файла сэкономила бы некоторое время в моем рабочем процессе кодирования.Я использую Visual Studio 2008, код написан на родном C ++ / MFC.Мои изменения кода полностью содержатся в DLL, а не в EXE.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

К сожалению, если исполняемый файл не поддерживает горячую замену DLL, вы не сможете это сделать. Стандартный механизм загрузки DLL в Windows будет загружать его либо в начале процесса, либо при первом использовании функции, экспортируемой DLL, и не будет следить за изменениями в файле для его перезагрузки. Кроме того, в зависимости от того, как загружена DLL, файл может быть заблокирован для изменений.

Вам придется остановить исполняемый файл клиента перед перекомпиляцией.

1 голос
/ 24 июня 2010

Да, это возможно. Вам нужно убедиться, что исполняемый файл явно загружает вашу DLL (через LoadLibrary). Если ваш исполняемый файл неявно загружает вашу DLL, у вас возникнут проблемы, описанные Франци.

Чтобы обновить библиотеку во время работы исполняемого файла:

  • Определите некоторые соглашения для подготовки новой версии DLL. Это может быть в отдельной папке, или с другим именем файла / расширением.
  • Имеется средство проверки новой версии DLL. Это может быть в ответ на какой-то конкретный жест в пользовательском интерфейсе, или вы можете отслеживать каталог на предмет изменений в фоновом потоке.
  • Когда вы видите новую версию, выгрузите старую версию (FreeLibrary), затем удалите ее, переместите новую версию в нужное место и перезагрузите ее (LoadLibrary).

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

...