2

現在の安定したJEDIコードライブラリをWindows7x32のC++BuilderXE3にインストールしました。正常に動作しますが、JclWin32.hppを含むJclFileUtils.hppのようなファイルを含めない限りです。次に、コンパイラエラーE2040が常に発生します:「宣言が正しく終了しませんでした」(ファイルJclWin32.hppの682行目、次のコードスニペットの2行目):

#define NetApi32 L"netapi32.dll"
static const System::Int8 CSIDL_PROGRAM_FILESX86 = System::Int8(0x2a);
#define RT_MANIFEST (System::WideChar *)(0x18)

このエラーが原因であるかどうかはわかりません。また、これに対するヒントも見つかりませんでした。原因は何でしょうか?前もって感謝します。

4

2 に答える 2

1

私はこの問題の助けと解決策を得ました。staticconst宣言を置き換えるだけです。

static const System::Int8 CSIDL_PROGRAM_FILESX86 = System::Int8(0x2a);

このマクロ定義で:

#define CSIDL_PROGRAM_FILESX86 0x2a
于 2012-09-18T13:14:34.483 に答える
0

これはのバグですJclWin32.pas

C / C ++では、Win32 APIは、プリプロセッサステートメントを使用CSIDLしてMicrosoftのヘッダーで値を宣言します。例:shlobj.h#define

#define CSIDL_PROGRAM_FILESX86 0x002a

プリプロセッサが実行されて#defineシンボル置換が実行された後、コンパイラは次の無効な宣言を次のように認識しJclWin32.hppます。

static const System::Int8 0x002a = System::Int8(0x2a);

CSIDL_PROGRAM_FILESX86JCLは(または他のCSIDL値を)再宣言してはなりません。次のいずれかになります。

  1. Winapi.ShlObjすでに値を宣言しているDelphi独自のユニットを使用しCSIDLます。

  2. ユニットを使用しない場合は、生成されたファイルに表示されないように、Winapi.ShlObj少なくとも手動CSIDL値を宣言する必要があります。必要に応じて、JCLには、C /C++プロジェクトで使用する既存のWin32API宣言をプルするステートメントを含めることができます。{$EXTERNALSYM}JclWin32.hpp{$HPPEMIT '#include <shlobj.h>'}

于 2017-03-27T17:32:33.780 に答える