2016-06-12 55 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