我一直试图让OmniThreadLibrary在构建器中运行,我已经用它构建好的所有c++必需文件构建了它,但是当我在c++构建器应用程序中使用它时,我得到了一堆错误消息,如下所示
bcc32错误DSiWin32.hpp(385):E2040声明被错误终止
在生成的hpp文件中的一行代码中有一个点。
静态const系统::Int8 8 CSIDL_ADMINTOOLS = System::Int8 8(0x30);
是否有人在C++构建器中使用过这种方法,或者知道解决这些问题的最佳方法?
我使用的是c++构建器结算和OmniThreadLibrary版本3.06
发布于 2016-06-12 17:26:47
Win32 API (以及Delphi )已经声明了CSIDL_ADMINTOOLS,因此根本不应该声明它。它应该使用德尔福的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}在生成的.hpp文件中输出相关的#include语句。德尔福的单位已经为它的Win32声明做到了这一点。
如果Omni还没有这样做(错误会表明它不是),那么就需要相应地更新它。
https://stackoverflow.com/questions/37775739
复制相似问题