【问题标题】:edit, debug and build both c dll and exe from single project and code base从单个项目和代码库编辑、调试和构建 c dll 和 exe
【发布时间】:2012-05-09 13:07:25
【问题描述】:

我在 VS2010 中有一个 C 控制台程序,我想将其作为单个项目进行编辑/调试/构建。也就是说,我想编写和调试它,就好像它是一个香草控制台 exe,但让它产生一个 dll 作为副产品。我在 SO (Making a C# project DLL and EXE) 上找到了以下信息

DLL 项目应该包含所有可重用的代码。正常项目应该是您正在构建的应用程序,它将引用您的可重用 DLL。这样,您可以在 DLL 项目中构建一个框架,该框架可用于您未来的任何项目。

在 SO 的其他地方,我发现了这个:https://stackoverflow.com/questions/7054481/how-to-produce-a-mix-of-dll-and-exe-in-one-c-sharp-project

您可以像引用 dll 一样引用 .Net 可执行文件,但您可以考虑将 exe 文件复制到具有相同名称的 dll 文件中... 您可以使用项目的 Visual Studio 生成后事件自动执行此过程。每次成功构建时,这将处理创建 dll 副本: 复制 "$(TargetPath)" "$(TargetDir)$(TargetName).dll"

似乎第一个选项意味着维护 2 个不同的项目。是否有理由这样做,而不是按照第二篇文章的建议,只复制我的 exe 并将扩展名从 exe 更改为 dll?

【问题讨论】:

  • 这在托管语言中是可能的,但在 C 语言中是不可能的。本机 DLL 具有不同的 CRT 启动代码。并且本机 EXE 不可重定位且不支持导出功能。更大的问题是,如果可能的话,你会在 main() 函数中写什么。你不能写在你的 EXE 项目的 main() 函数中。编写单元测试只是为了测试导出的函数,因为这是任何使用 DLL 的代码唯一可用的东西。还可以考虑创建一个静态库的第三个项目,您可以在 DLL 和 EXE 项目中进行链接。

标签: c visual-studio dll code-reuse


【解决方案1】:

Hans Passant 回答了这个问题,但我无法将其标记为已回答,因为它是一条评论。所以这是他的答案:

“这在托管语言中是可能的,但在 C 语言中是不可能的。本机 DLL 具有不同的 CRT 启动代码。本机 EXE 不可重定位且不支持导出函数。更大的问题是,如果可能的话,您在 main() 函数中编写的内容。您无法在 EXE 项目的 main() 函数中编写内容。编写单元测试仅用于测试导出的函数,因为这是任何使用 DLL 的代码唯一可用的东西。还可以考虑创建一个静态库的第三个项目,您可以在 DLL 和 EXE 项目中进行链接”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多