【问题标题】:Classes allowed in a Win32 DLL?Win32 DLL 中允许的类?
【发布时间】:2012-07-11 04:44:10
【问题描述】:

我制作的 NSIS 插件可以包含 C++ 类还是只能是 C 代码?

我正在开发一个作为 Win32 DLL 的 NSIS 插件,但我在声明类的行的头文件中遇到编译错误。

编译错误是:

错误 C2061:语法错误:标识符“MyClass”

导致编译错误的行是:

class MyClass

怎么了?我不允许在 Win32 DLL 中使用类吗?我在 MS Visual C++ 2010 中编译。

【问题讨论】:

  • 您当然可以在 DLL 中放置/使用类。也许您将代码编译为 C 而不是 C++?
  • 一旦你编译,C 和 C++ 没有什么不同。正如 Jerry 所说,您必须使用 C 编译器而不是 C++ 编译器。
  • NSIS 插件 ABI 只是一个 C 函数导出,它不关心 dll 中的内部代码或用于创建它的语言。

标签: winapi dll nsis


【解决方案1】:

多年前我犯了这个错误,花了一个小时挠头。我正在寻找一个编译器选项,它可以选择代码是编译为 C 还是 C++,但是在 IDE 中没有可以选择的选项(尽管你可以使用 @987654322 从 cl 命令行控制它@ 和 /Tp)。不过,答案很简单。

如果源文件具有.c 扩展名,则将其编译为C。如果源文件具有.cpp 扩展名,则将其编译为C++。

此外,如果您将 C++ 结构(例如类)放在头文件中,而 #include 将它们放在 C 文件中,您会遇到同样的问题。您可以使用 #ifdef __cplusplus 对 C 隐藏 C++ 构造。

【讨论】:

  • 有一个选项,/Tc vs /Tp
  • @HansPassant 所以有!虽然这是 VC6,但据我所知,它不允许您在单个源文件上设置任意编译器开关。
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多