2016-06-12 71 views
2

我一直在试图让OmniThreadLibrary在构建器中运行,我用它构建的所有C++必需文件构建它,但是当我在C++ builder应用程序中使用它时,我得到一堆看起来像错误消息下面OmniThreadLibrary C++ builder构建问题

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

一个点,在所生成的文件HPP

静态常量系统这行代码终止: :Int8 CSIDL_ADMINTOOLS = System :: Int8(0x30);

有没有人曾在C++ Builder的这个工作还是知道解决这些问题

我使用C++ Builder的落户和OmniThreadLibrary版本3.06

+0

我已经提出这个问题请参阅链接的详细信息https://github.com/gabr42/OmniThreadLibrary/issues/72 – Shaun07776

+0

为什么投票下来? – Shaun07776

回答

3

在Win32 API(和Delphi的最佳途径,对于这个问题)已经声明CSIDL_ADMINTOOLS,Omni不应该被声明。它应该使用Delphi的Shlobj单元。

的Win32 API的使用#define语句声明CSIDL_ADMINTOOLS

#define CSIDL_ADMINTOOLS 0x0030 

因此,在全方位的.hpp的声明得到由C++预处理程序修改为这样:

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

因此,“宣言终止错误“编译器错误。

当Delphi代码宣称已经存在于C++的东西,它需要被声明为{$EXTERNALSYM}{$NODECLARE}以避免重复申报,然后在生成.hpp文件有选择地使用{$HPPEMIT}输出相关#include声明。 Delphi的单位已经为Win32声明做了这些。

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

+0

嗨,雷米。感谢我现在通过对它们进行评论而成功地开展工作。看起来他们做了一些,但我想不是全部。 – Shaun07776

+0

@ Shaun07776你应该向Omni作者提交一份错误报告。 –

+0

是的,我会的。我不认为他们每个报告都支持C++ builder,但它似乎工作正常。之后我会提出一些其他问题,我会提出这些问题。谢谢你的帮助 – Shaun07776