2011-09-09 11 views

答えて

10

ユニット名uMSXMLVersionまたはお好みの名前に以下のコードを追加し、プロジェクトに追加するには

{----------------------------------------------------------------------------  
    Set Delphi's XMLDocument to use MSXML v6.0 

    Usage: Include unit in project "uses"-list and Delphi will automatically use 
      MSXML v6.0 for TXmlDocument. 
-----------------------------------------------------------------------------} 
unit uMSXMLVersion; 

interface 

implementation 

uses ActiveX, MSXML, MSXMLDOM; 

function CreateDOMDocumentEx: IXMLDOMDocument; 
const 
    CLASS_DOMDocument60: TGUID = '{88D96A05-F192-11D4-A65F-0040963251E5}'; 
begin 
    Result := nil; 
    if CoCreateInstance(CLASS_DOMDocument60, nil, CLSCTX_INPROC_SERVER or 
    CLSCTX_LOCAL_SERVER, IXMLDOMDocument, Result) <> S_OK then 
    Result := CreateDOMDocument; //call the default implementation 
end; 

initialization 
    MSXMLDOMDocumentCreate := CreateDOMDocumentEx; 

end. 
+0

機能を再割り当てするための素敵なトリック。私はあなたがデルファイでこの動的言語のトリックをすることができるかどうかはわかりませんでした。 – neves

+0

[致命的なエラー] uMSXMLVersion.pas(13):ファイルが見つかりませんでした: 'MSXML.dcu' in:これは、私が作業しているレガシーコードを作成した人たちも、デルファイ7パーソナル版。私は何が欠けていますか? – Slappy

8

を使用していますmsxmldom.pasユニットを使用すると、例えば、にカスタムハンドラを割り当てることができます公共MSXMLDOMDocumentCreateフックを公開します:

uses 
    ..., msxmldom; 

const 
    CLASS_DOMDocument60: TGUID = '{88D96A05-F192-11D4-A65F-0040963251E5}'; 

function CreateMSXML6Document: IXMLDOMDocument; 
var 
    Disp: IDispatch; 
begin 
    OleCheck(CoCreateInstance(CLASS_DOMDocument60, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IDispatch, Disp)); 
    Result := Disp as IXMLDOMDocument; 
    if not Assigned(Result) then 
    raise DOMException.Create('MSXML 6.0 Not Installed'); 
end; 

initialization 
    msxmldom.MSXMLDOMDocumentCreate := CreateMSXML6Document; 
+0

私は今それをしました。 –

+1

あなたの答えをありがとう。私はあなたのコードがフリッツ・デルマンのものよりも少し良いと思っていますが、以前彼は答えました。 – neves

関連する問題