【问题标题】:Create C++ unmanaged DLL using VS2010使用 VS2010 创建 C++ 非托管 DLL
【发布时间】:2011-12-10 22:01:42
【问题描述】:

我在 VS2010 中创建了一个 dll 项目(Win32 控制台应用程序>dll)。我在编译时在项目中放入了一些头文件,但出现此错误:

error LINK2001: unresolved external symbol _dllmaincrtstartup@12

这是什么?我该如何解决?
头文件还定义了一些抽象类。

【问题讨论】:

  • 如果是控制台应用,为什么需要dll?
  • @ThomasMcLeod:VS 中的向导有点误导 - 首先您必须选择“Win32 控制台应用程序”,然后在第二步中选择“DLL”。
  • 项目向导有几个入口点,这很混乱。但是,您进入 Win32 应用程序向导,在最后一页的“应用程序设置”对话框下,您要选择“控制台应用程序”而不是“DLL”。

标签: c++ visual-studio-2010 dll unmanaged


【解决方案1】:

使用 /NOENTRY 选项,该选项是创建仅资源 DLL 所必需的。使用此选项可防止 LINK 将对 _main 的引用链接到 DLL。

Project Property Pages -> Linker -> Advanced: No Entry Point 设置为 Yes (/NOENTRY)

“包含使用 /clr 编译的对象的 DLL 未与 /NOENTRY 链接;图像可能无法正确运行” http://support.microsoft.com/kb/814472

【讨论】:

  • 我认为这个问题与纯资源 DLL 无关。
  • 但最后一条评论是“将 DllMain 添加到 .cpp 文件中解决了它。现在它可以编译了。谢谢。-atoMerz 2011 年 12 月 10 日 22:33”我猜它是仅资源的 DLL。
  • “头文件也定义了一些抽象类” -> 听起来不像是资源。听起来他们不知何故没有让向导正常工作(或选择了错误的选项)。
【解决方案2】:

问:是 .dll 无法构建(而不是使用 .dll 的 .exe),对吗?

问:您的 .dll 源中是否有任何内容具有 DllMain()?

如果没有,你会考虑加一个吗?

问:您确定项目设置是为“DLL”配置的吗?对于“/MT”(多线程、静态链接)?

问:如果一切都失败了,您是否考虑过创建一个新项目、创建一个“hello world”.dll 并验证它是否构建?

【讨论】:

  • 没有。应该是?它有什么用?
  • 这应该是对问题的评论,而不是答案。
  • 是的,dll 失败了。我还没有创建一个项目来使用它。 DLLMain 不存在。添加void DLLMain() {} 没有帮助。我只知道配置类型设置为动态链接库 (.dll)。
  • 我创建了另一个项目并添加了一个头文件,其中包含一个打印“Hello World!”的 Hello 函数。当我编译时,我得到了和以前一样的错误
  • 将 DllMain 添加到 .cpp 文件解决了这个问题。现在它编译了。谢谢。
猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
相关资源
最近更新 更多