2012-04-29 1 views
1

У меня есть консольная программа C в VS2010, которую я хотел бы отредактировать/отладить/построить как один проект. То есть, я хотел бы написать это и отладить его, как если бы это была консольная консоль exe, но она создала dll как побочный продукт. Я нашел следующую информацию о SO (Making a C# project DLL and EXE)Редактировать, отлаживать и строить как c 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

вы можете ссылаться на .NET, исполняемый файл, как если бы это было длл в любом случае, но вы могли бы рассмотреть возможность скопировать исполняемый файл в длл файл с расширением то же имя ... Вы можете автоматизировать этот процесс, используя событие post-build для Visual Studio для вашего проекта. Это будет обрабатывать создание DLL, копировать каждый раз, когда вы имеете успешную сборку: копии «$ (TargetPath)» «$ (TargetDir) $ (Имя_целевого_объект) .dll»

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

+1

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

ответ

0

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

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