Удаление внешних зависимостей для проекта MFC DLL - PullRequest
1 голос
/ 30 сентября 2010

Я занимаюсь разработкой проекта MFC DLL в VS2008. DLL компилирует нормально, и я могу назвать это нормально из exe графического интерфейса, который разработал для меня подрядчик. Распространяемые Visual C ++ должны быть установлены для моей DLL (и, возможно, exe, который также разработан в C ++)

Другая компания хочет лицензировать мою dll для использования с их C ++ exe. Они просили, чтобы у моей dll не было внешних зависимостей. Можно ли скомпилировать мою DLL, чтобы удалить все внешние зависимости, такие как распространяемые файлы Visual C ++?

Настройка / MT делает это? Я прочитал Должен ли я скомпилировать с / MD или / MT? , что имеет некоторый смысл, но я обеспокоен dll ад.

Может ли это создать проблемы с exe, вызывающим мою dll? Я где-то читал о том, что exe и dll должны использовать одни и те же распространяемые файлы Visual C ++ или что-то в этом роде.

Я немного новичок в C ++. Любой совет приветствуется.

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Почему бы вам не упаковать все зависимые библиотеки в пакет установщика и выпустить его для своего клиента?

Я видел, что некоторые из пакетов программного обеспечения включают зависимые библиотеки vc ....

1 голос
/ 30 сентября 2010

Вы можете связать со статической версией CRT (да, / MT), но это довольно опасно. Вам нужно будет внимательно просмотреть свой экспорт. Убедитесь, что ни один из них не возвращает объекты C ++, даже std :: string (или CString). Или любые указатели, которые клиентский код должен выпустить. Это может пойти не так, потому что клиент будет иметь свою собственную копию CRT и использовать другую кучу. Это приведет к утечке возвращенного объекта / указателя, аварийному завершению программы в Vista и Win7, когда их безопасный менеджер кучи обнаружит, что указатель не принадлежит к куче.

Это может быть предметом споров, что именно означает «внешняя зависимость». Зависимость от ЭЛТ не является абсолютно внешней. Однако вам нужно будет предоставить им версию библиотеки DLL, которая была построена на той же версии Visual Studio, которую они используют. ЭЛТ может использоваться совместно, только если версия совпадает.

...