【问题标题】:OmniThreadLibrary C++ builder Build issuesOmniThreadLibrary C++ 构建器构建问题
【发布时间】:2016-10-13 01:04:37
【问题描述】:

我一直试图让 OmniThreadLibrary 在构建器中运行,我已经用它构建好的所有 c++ 所需文件构建了它,但是当我在 c++ 构建器应用程序中使用它时,我收到一堆看起来像的错误消息以下

[bcc32 错误] DSiWin32.hpp(385): E2040 声明错误终止

在生成的hpp文件中这一行代码点上

静态常量 System::Int8 CSIDL_ADMINTOOLS = System::Int8(0x30);

有没有人在 C++ builder 中工作过或知道解决这些问题的最佳方法

我正在使用 c++ builder 和 OmniThreadLibrary 3.06 版

【问题讨论】:

标签: delphi c++builder omnithreadlibrary


【解决方案1】:

Win32 API(和 Delphi,就此而言)已经声明了 CSIDL_ADMINTOOLS,Omni 根本不应该声明它。它应该使用 Delphi 的 Shlobj 单元。

Win32 API 使用 #define 语句声明 CSIDL_ADMINTOOLS

#define CSIDL_ADMINTOOLS 0x0030

所以 Omni 的 .hpp 中的声明被 C++ 预处理器修改为:

static const System::Int8 0x0030 = System::Int8(0x30);

因此“声明错误地终止”编译器错误。

当 Delphi 代码声明 C++ 中已经存在的内容时,需要将其声明为 {$EXTERNALSYM}{$NODECLARE} 以避免重复声明,然后可选地使用 {$HPPEMIT} 在 a 中输出相关的 #include 语句生成.hpp 文件。 Delphi 的单元已经在其 Win32 声明中这样做了。

如果 Omni 还没有这样做(并且错误表明它不是),那么它需要相应地更新。

【讨论】:

  • 嗨雷米。谢谢我已经设法通过现在评论它们来让它工作。看起来他们做了一些,但我猜不是全部。
  • @Shaun07776 你应该向 Omni 作者提交错误报告。
  • 是的,我会的。我不认为他们每个报告都支持 c++ builder,但它似乎工作正常。之后我会提出其他一些问题。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多