редактировать, отлаживать и создавать c dll и exe из одного проекта и базы кода

У меня есть консольная программа C в VS2010, которую я хотел бы редактировать/отлаживать/собирать как отдельный проект. То есть я хотел бы написать его и отладить, как если бы это был исполняемый файл ванильной консоли, но создать dll в качестве побочного продукта. Я нашел следующую информацию о SO (Создание библиотеки DLL и EXE проекта С#)

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

В другом месте на SO я нашел это: https://stackoverflow.com/questions/7054481/how-to-produce-a-mix-of-dll-and-exe-in-one-c-sharp-project-in-visual-studio-or-o

в любом случае вы можете ссылаться на исполняемый файл .Net, как если бы это была dll, но вы можете рассмотреть возможность копирования exe-файла в dll-файл с тем же именем... Вы можете автоматизировать этот процесс, используя событие пост-сборки Visual Studio для вашего проекта . Это будет обрабатывать создание копии dll каждый раз при успешной сборке: copy "$(TargetPath)" "$(TargetDir)$(TargetName).dll"

Похоже, что первый вариант означает поддержку 2 разных проектов. Есть ли причина сделать это вместо того, чтобы делать то, что советует второй пост, и просто скопировать весь мой exe-файл и изменить расширение с exe на dll?


person PaeneInsula    schedule 29.04.2012    source источник
comment
Это возможно в управляемом языке, но не в C. Нативная DLL имеет другой код запуска CRT. И собственный EXE не перемещается и не поддерживает экспортированные функции. Более важный вопрос, если бы это было возможно, что бы вы написали в своей функции main(). То, что вы не могли написать в функции main() вашего EXE-проекта. Пишите модульные тесты только для проверки экспортированных функций, поскольку это единственное, что доступно любому коду, использующему вашу DLL. Также рассмотрите третий проект, который создает статическую библиотеку, которую вы можете связать как в своих проектах DLL, так и в проектах EXE.   -  person Hans Passant    schedule 29.04.2012


Ответы (1)


Ханс Пассант ответил на вопрос, но я не могу пометить его как ответ, потому что это комментарий. Итак, вот его ответ:

«Это возможно в управляемом языке, но не в C. Нативная DLL имеет другой код запуска CRT. А нативный EXE не перемещается и не поддерживает экспортированные функции. d напишите в своей функции main(). То, что вы не можете написать в функции main() вашего EXE-проекта. Пишите модульные тесты только для проверки экспортированных функций, поскольку это единственное, что доступно для любого кода, использующего вашу DLL. Также рассмотрите возможность Третий проект, который создает статическую библиотеку, которую вы можете связать как в своих проектах DLL, так и в проектах EXE.

person PaeneInsula    schedule 08.05.2012