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 尚未执行此操作(并且错误会提示未执行此操作),则需要对其进行相应更新。
我一直在尝试让 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 尚未执行此操作(并且错误会提示未执行此操作),则需要对其进行相应更新。