OmniThreadLibrary C++ 构建器构建问题

OmniThreadLibrary C++ builder Build issues

我一直在尝试让 OmniThreadLibrary 在构建器中 运行,我已经用所有 C++ 所需的文件构建它,它构建正常,但是当我在 C++ 构建器应用程序中使用它时,我得到了一堆类似于以下内容的错误消息

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

one指向生成的hpp文件中的这一行代码

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

有没有人在 C++ 构建器中使用过这个或者知道解决这些问题的最佳方法

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

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);

因此 "Declaration terminated incorrectly" 编译器错误。

当Delphi代码声明C++中已经存在的东西时,需要声明为{$EXTERNALSYM} or {$NODECLARE} to avoid duplicate declarations, and then optionally use {$HPPEMIT}以在生成的.hpp中输出相关的#include语句文件。 Delphi 的单位已经在其 Win32 声明中这样做了。

如果 Omni 尚未执行此操作(并且错误会提示未执行此操作),则需要对其进行相应更新。