2

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

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

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

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

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

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

4

1 回答 1

3

Win32 API(和 Delphi,就此而言)已经声明 CSIDL_ADMINTOOLS,Omni 根本不应该声明它。它应该改用德尔福的Shlobj单位。

Win32 APICSIDL_ADMINTOOLS使用以下#define语句声明:

#define CSIDL_ADMINTOOLS 0x0030

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

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

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

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

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

于 2016-06-12T17:26:47.967 回答