XE5 Starter版でXML文書を処理するためにOpen XMLを使いたいのですが、ビルドできません。
http://www.philo.de/xml/downloads.shtmlから最新版のadom_4_3とUtils_3_0をダウンロードして、ビルドし用としたのですが、
[dcc32 致命的エラー] AdomPropertyEditor_4_3.pas(64): F1026 ファイル 'D:\Download\OpenXML\adom_4_3\Adom_4_3\packages\Win32\DelphiXE2\DsgnIntf.dcu' が見つかりません
というエラーが出ます。(utils_3_0の方はビルドできました)。
どうすればいいんでしょうか?
たぶん、以下のところを書き換えたら大丈夫かなとは思うんですが...
uses
SysUtils, Classes, Graphics, Forms, Dialogs, TypInfo,
{$IFDEF LINUX}
QStdCtrls, QButtons, QControls, DesignIntf, DesignEditors;
{$ELSE}
StdCtrls, Buttons, Controls,
{$IFDEF VER140+} // Delphi 7 up
{$IFDEF CLR}
Borland.Vcl.Design.DesignIntf, Borland.Vcl.Design.DesignEditors,
System.ComponentModel;
// If you encounter a compile error here, you must manually add
// Borland.Studio.Vcl.Design.dll to the 'Requires' section of the
// ADOM package by right-clicking on the 'Requires' folder and
// selecting 'Add Reference...', etc.
{$ELSE}
DesignIntf, DesignEditors;
{$ENDIF}
{$ELSE} DsgnIntf; {$ENDIF} ここでエラーが発生しているようです。
{$ENDIF}
現物で確認してないですが、XE5で"VER140+"が定義されていないんじゃないですか?
もしそうなら、自分で定義してしまえばエラーは出なくなりそうです。
(他のエラーがでるかも知れませんが)
Questさん、回答ありがとうございます。
調べてみます。
ごめんなさい、さっぱりわかりません。
だれか、ヒントでもいいから教えてください。
m(._.)m
とりあえず
uses
SysUtils, Classes, Graphics, Forms, Dialogs, TypInfo,
StdCtrls, Buttons, Controls, DesignIntf, DesignEditors;
(* {$IFDEF LINUX}
QStdCtrls, QButtons, QControls, DesignIntf, DesignEditors;
{$ELSE}
StdCtrls, Buttons, Controls,
{$IFDEF VER140+} // Delphi 7 up
{$IFDEF CLR}
Borland.Vcl.Design.DesignIntf, Borland.Vcl.Design.DesignEditors,
System.ComponentModel;
// If you encounter a compile error here, you must manually add
// Borland.Studio.Vcl.Design.dll to the 'Requires' section of the
// ADOM package by right-clicking on the 'Requires' folder and
// selecting 'Add Reference...', etc.
{$ELSE}
DesignIntf, DesignEditors;
{$ENDIF}
{$ELSE} DsgnIntf; {$ENDIF} ここでエラーが発生しているようです。
{$ENDIF}*)
このようにしたらどうなりますか?
Questさん、回答ありがとうございます。
今度は別のところで、別のエラーが出ます。
//++++++++++++++++++++++++++++ TDomNodeList +++++++++++++++++++++++++++++++
constructor TDomNodeList.Create(const NodeList: TList);
begin
inherited Create;
FNodeList := NodeList;
end;
function TDomNodeList.GetLength: Integer;
begin
Result := FNodeList.Count;
end;
function TDomNodeList.IndexOf(const Node: TDomNode): Integer;
begin
Result := FNodeList.IndexOf(Node);
end;
{$IFDEF VER230+_OR_CLR}
function TDomNodeList.Item(const Index: Integer): TDomNode;
begin
if (Index < 0) or (Index >= FNodeList.Count)
then Result := nil
else Result := TDomNode(FNodeList[Index]);
end;
{$ELSE}
function TDomNodeList.Item(const Index: Integer): TDomNode;
begin
if (Index < 0) or (Index >= FNodeList.Count)
then Result := nil
else Result := TDomNode(FNodeList.List^[Index]); //ここでエラーが出ます
end;
[dcc32 警告] W1030 間違ったコンパイル指令 : 'true'
[dcc32 エラー] dkAdomCore_4_3.pas(6359): E2017 ポインタ型が必要です
[dcc32 エラー] dkAdomCore_4_3.pas(24751): E2017 ポインタ型が必要です
[dcc32 エラー] dkAdomCore_4_3.pas(24901): E2017 ポインタ型が必要です
[dcc32 エラー] dkAdomCore_4_3.pas(24902): E2017 ポインタ型が必要です
[dcc32 エラー] dkAdomCore_4_3.pas(24902): E2017 ポインタ型が必要です
[dcc32 エラー] dkAdomCore_4_3.pas(24903): E2017 ポインタ型が必要です
[dcc32 エラー] dkAdomCore_4_3.pas(26096): E2017 ポインタ型が必要です
[dcc32 致命的エラー] AdomPropertyEditor_4_3.pas(110): F2063 'dkAdomCore_4_3.pas' ユニットはコンパイルできませんでした
どうやらVER***という定義が認識されていないようですね。
その原因が何なのか判りませんが、とりあえず対症療法として
IFDEFでVER***を判断してる箇所を探して、それらを自分で判断して直接
不要なソースをコメントアウトしていってはどうでしょうか。
もとのOpen XMLがどのバージョンまで確認しているかわかりませんが
VER230がXE2に相当するようなので、たぶんXE2まで確認されているんだろうと思います。
ん、でも"VER230+_OR_CLR"こんな定義、標準であったかな?
もしかしたら、Open XMLのソース群の中にこれらを纏めて定義している箇所が
あるかもしれません。
で、その対症療法ですが、前回のレスのようにエラーが出た箇所がIFDEFで括られているなら
その部分がIFDEFの判断で除外されると仮定して、自分で書き換えてしまいます。
今回のエラーの件なら{$IFDEF VER230+_OR_CLR}の{ELSE}側ブロックで出ていて
VER230+_OR_CLRがたぶん「XE2以降 or CLR」でしょうからXE5なら真と判断して
//{$IFDEF VER230+_OR_CLR}
function TDomNodeList.Item(const Index: Integer): TDomNode;
begin
if (Index < 0) or (Index >= FNodeList.Count)
then Result := nil
else Result := TDomNode(FNodeList[Index]);
end;
//{$ELSE}
//
//function TDomNodeList.Item(const Index: Integer): TDomNode;
//begin
// if (Index < 0) or (Index >= FNodeList.Count)
// then Result := nil
// else Result := TDomNode(FNodeList.List^[Index]);
//end;
こうしてしまいます。
これで動作するという保証はできませんが、エラーは減っていくんではないかと思います。
こちらにバージョン定義の一覧があるので参考にしてください。
http://docwiki.embarcadero.com/RADStudio/XE5/ja/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9_%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3
本当はOpenXMLの内容まで確認して、必要な部分を判断しなければならないですが
そこまで追っかける気力が無いんで(^^;
予断ながら、XE5ならXMLを扱うコンポくらいありそうですけどね。
ちょこっとヘルプで検索したらTXMLDocumentというのがあるようです。
(うーん、そういえばRESTの処理したときにお世話になった気が^^;)
特別な理由で「どうしてもOpenXMLでなければダメ」というのでなければ
標準のコンポーネントを試してみてはいかがでしょう。
Questさん、回答ありがとうございます。
>標準のコンポーネントを試してみてはいかがでしょう。
残念ながら、XE5のStarter版にはないようです。
XPパソコンにDelphi2005がインストールしてあるんですが、こちらにはInternetのところに
あります。
こっちのPCでDLLを作っても無駄かなあ?
試してないけど全てのpasファイルの頭に
{$IFDEF VER260}
{$DEFINE VER140+}
{$DEFINE VER170+}
{$DEFINE VER230+_OR_CLR}
{$ENDIF}
て追加したらコンパイル通りませんか?
まあ、他のエラーが出るかも知れませんが、ファイルの先頭で上みたいな
{$IFDEF VER???}とかいう行があったら???の一番大きなブロックをコピペして数字を260に書き換えたら良いかと思います。
auさん、回答ありがとうございます。
エラーが出るたびに230という数字を260に書き換えていったら、コンパイルできました。
(「警告 W1030間違ったコンパイル指令:'true'」というのがでていますけど)
これでプログラムを作ってみます。
やっと、ADOMのインストールができました。
みなさん、ありがとうございます。
ツイート | ![]() |