Open XMLを使いたいのですが

解決


QZ  2013-12-23 17:58:21  No: 45771

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の方はビルドできました)。
どうすればいいんでしょうか?


QZ  2013-12-24 02:09:54  No: 45772

たぶん、以下のところを書き換えたら大丈夫かなとは思うんですが...
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}


Quest  2013-12-24 02:19:56  No: 45773

現物で確認してないですが、XE5で"VER140+"が定義されていないんじゃないですか?
もしそうなら、自分で定義してしまえばエラーは出なくなりそうです。
(他のエラーがでるかも知れませんが)


QZ  2013-12-24 17:18:56  No: 45774

Questさん、回答ありがとうございます。
調べてみます。


QZ  2013-12-27 06:27:34  No: 45775

ごめんなさい、さっぱりわかりません。
だれか、ヒントでもいいから教えてください。
m(._.)m


Quest  2013-12-27 08:04:07  No: 45776

とりあえず
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}*)
このようにしたらどうなりますか?


QZ  2013-12-27 15:42:00  No: 45777

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' ユニットはコンパイルできませんでした


Quest  2013-12-27 21:10:59  No: 45778

どうやら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を扱うコンポくらいありそうですけどね。


Quest  2013-12-27 21:18:04  No: 45779

ちょこっとヘルプで検索したらTXMLDocumentというのがあるようです。
(うーん、そういえばRESTの処理したときにお世話になった気が^^;)
特別な理由で「どうしてもOpenXMLでなければダメ」というのでなければ
標準のコンポーネントを試してみてはいかがでしょう。


QZ  2013-12-28 00:47:32  No: 45780

Questさん、回答ありがとうございます。

>標準のコンポーネントを試してみてはいかがでしょう。
残念ながら、XE5のStarter版にはないようです。

XPパソコンにDelphi2005がインストールしてあるんですが、こちらにはInternetのところに
あります。
こっちのPCでDLLを作っても無駄かなあ?


au  2013-12-28 01:09:32  No: 45781

試してないけど全てのpasファイルの頭に
{$IFDEF VER260}
  {$DEFINE VER140+}
  {$DEFINE VER170+}
  {$DEFINE VER230+_OR_CLR}
{$ENDIF}
て追加したらコンパイル通りませんか?
まあ、他のエラーが出るかも知れませんが、ファイルの先頭で上みたいな
{$IFDEF VER???}とかいう行があったら???の一番大きなブロックをコピペして数字を260に書き換えたら良いかと思います。


QZ  2013-12-28 01:57:32  No: 45782

auさん、回答ありがとうございます。
エラーが出るたびに230という数字を260に書き換えていったら、コンパイルできました。
(「警告  W1030間違ったコンパイル指令:'true'」というのがでていますけど)

これでプログラムを作ってみます。


QZ  2013-12-28 17:06:09  No: 45783

やっと、ADOMのインストールができました。
みなさん、ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加