header image

携帯対応

QRコード

RING

人気ブログランキング

新着記事

2009/03/25 12:35:46 Delphi none Comments

ちょっくらDelphiでXMLRPCをごにょごにょするアプリを作っているのだけれど、その際のメモ。

Indyを使ってBASIC認証を通過させたいとき、リクエストURLを変えてhttp://id:password@hostではNGで、Indyのプロパティを設定してあげる必要がある。

Session := TIdHttp.Create(nil);
try
  Session.Request.Clear;
  Session.Request.BasicAuthentication := True;

  if Session.Request.Authentication = nil
  then begin
    Session.Request.Username := 'hoge';
    Session.Request.Password := 'fuga';
  end else
  begin
    Session.Request.Authentication.Username := 'hoge';
    Session.Request.Authentication.Password := 'fuga';
  end;
  Session.Get('http://192.168.1.129');
finally
  Session.Free;
end;

2009/01/02 08:21:24 Delphi none Comments Tags:

XML-RPCを使ってごにょごにょするためにDelphi5を使ってWindowsソフト作ろうとしていたんだよ。
#いまさらDelphi5なのは、さておき。

XML-RPCなんて自前で処理書くのバカバカしいから、コンポーネント探してみて、Delphi XML-RPCってのみつけて早速試してみたんだけど、コンパイル通らない・・・。調べてみたら、

IInterface

  • COMを使用しない場合のインターフェース
  • Delphi 6 で導入された

そういうことか。ということで、IInterfaceをIUnknownに書き換えて・・・以下のように修正

sourceフォルダにVariants.pasを作成する。中身は雛形の通りで良い。

unit Variants;

interface

implementation

end.

その他は3ファイル。BuildXmlRpcLib.dprとXmlRpcTypes.pasとXmlRpcServer.pasを下記のdiffの通り修正する。
基本的には、IInterfaceとIUnknownにすることと、StrToBoolがDelphi5には無いので適当に実装を追加するってことくらい。

Index: lib/dxmlrpc-2.0.0/build/BuildXmlRpcLib.dpr
===================================================================
--- lib/dxmlrpc-2.0.0/build/BuildXmlRpcLib.dpr (リビジョン 49)
+++ lib/dxmlrpc-2.0.0/build/BuildXmlRpcLib.dpr (リビジョン 50)
@@ -10,5 +10,6 @@
   XmlRpcTypes in '..sourceXmlRpcTypes.pas',
   XmlRpcCommon in '..sourceXmlRpcCommon.pas',
-  XmlRpcServer in '..sourceXmlRpcServer.pas';
+  XmlRpcServer in '..sourceXmlRpcServer.pas',
+  Variants in '..sourceVariants.pas';
 
 begin
Index: lib/dxmlrpc-2.0.0/source/XmlRpcTypes.pas
===================================================================
--- lib/dxmlrpc-2.0.0/source/XmlRpcTypes.pas (リビジョン 49)
+++ lib/dxmlrpc-2.0.0/source/XmlRpcTypes.pas (リビジョン 50)
@@ -36,5 +36,5 @@
 
 uses
-  SysUtils, Classes, Contnrs, DIMime, XmlRpcCommon;
+  SysUtils, Classes, Contnrs, DIMime, XmlRpcCommon, ActiveX, ComObj;
 
 type
@@ -45,5 +45,5 @@
       dtStruct, dtArray, dtError, dtNone, dtName, dtValue);
 
-  IRpcCustomItem = interface(IInterface)
+  IRpcCustomItem = interface(IUnknown)
   ['{3441C47B-364D-4BE6-834E-E05C4FCAE9A6}']
     function GetAsRawString: string;
@@ -196,5 +196,5 @@
   end;
 
-  IRpcCustomArray = interface(IInterface)
+  IRpcCustomArray = interface(IUnknown)
   ['{8177A796-7C3B-4C01-901C-88A13DA61F85}']
     function GetItems(Index: Integer): TRpcArrayItem;
@@ -259,5 +259,5 @@
   end;
 
-  IRpcStruct = interface(IInterface)
+  IRpcStruct = interface(IUnknown)
   ['{7527E27A-6B61-41D6-9546-93DC816D8285}']
     function InternalAddItem(const Key: string): TRpcStructItem;
@@ -372,5 +372,8 @@
   TRpcReturn = TRpcFunction;
 
+  function strtobool(value : string) : Boolean;
+
 implementation
+
 
 {
@@ -839,4 +842,17 @@
 end;
 
+function strToBool(value : String) : Boolean;
+begin
+  if lowercase(value) = 'true' then
+  begin
+    result := true; exit;
+  end;
+  if strtointdef(value, 0) = 1 then
+  begin
+    result := true;
+    exit;
+  end;
+  result := false;
+end;
 
 {
Index: lib/dxmlrpc-2.0.0/source/XmlRpcServer.pas
===================================================================
--- lib/dxmlrpc-2.0.0/source/XmlRpcServer.pas (リビジョン 49)
+++ lib/dxmlrpc-2.0.0/source/XmlRpcServer.pas (リビジョン 50)
@@ -335,5 +335,5 @@
   // FMethodList := TList.Create; Take TObjectList instead of TList;
   FMethodList := TObjectList.Create;
-  FMethodList.OwnsObjects := True;
+  //FMethodList.OwnsObjects := True;
   FLock := TCriticalSection.Create;
 end;

これで動作するようになった。

2008/01/12 20:53:09 Delphi none Comments Tags:

IHTMLElementCollectionから、特定のFormオブジェクトを取得するには、item関数を利用するのだが、この際、実は引数の渡し方は複数ある。

Form := Forms.item('form1', 0) as IHTMLFormElement;

上記は、要素名がauthと呼ばれる要素のうち一番最初のformを取得する。この場合は第一引数に要素名、第二引数にindex値を指定する。

Form := Forms.item(1, 1) as IHTMLFormElement;

上記はformの中で、二番目のformを取得する。この場合は、第一引数と第二引数に共に、IHTMLElementCollectionのindex値を指定する。

参考

http://msdn2.microsoft.com/en-us/library/aa703930.aspx

2007/12/02 04:44:57 Delphi none Comments Tags: ,

Delphiの話。
色々あって起動中のブラウザで表示中の画面を横取りして、formの項目をfillinしてPOSTしないといけない要件がある。まずはWindowハンドルを元にして、起動中のIEのIWebBrowser2インタフェイスを取得する方法。

function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
  hInst: HWND;
  lRes: Cardinal;
  Msg: Integer;
  pDoc: IHTMLDocument2;
  ObjectFromLresult: TObjectFromLresult;
begin
  hInst := LoadLibrary('Oleacc.dll');
  @ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
  if @ObjectFromLresult <> nil then
  begin
    try
      Msg := RegisterWindowMessage('WM_HTML_GETOBJECT');
      SendMessageTimeOut(WHandle, Msg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
      if Result = S_OK then
        (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp,
          IWebbrowser2, IE);
    finally
      FreeLibrary(hInst);
    end;
  end;
end;

これでIWebBrowser2のインタフェイスが取得できれば、文書の操作は簡単。

doc := IE.Document as IHtmlDocument2;
ShowMessage(doc.body.innerHTML);

ブラウザからIHtmlDocument2インタフェイスを取得し、それを通じてhtmlの本体にアクセスできる。

2007/11/25 23:49:41 Delphi none Comments Tags: ,

DCL

DelphiComponentListerは、あまり人の役に立たない簡単なツール。
Delphi製のアプリケーション(C++Builderもいけると思う)で利用しているコンポーネントの一覧を抽出してくれるツールである。
色々な野良コンポーネントを導入していると、ビルドに必要か必要でないのかの判断が付かなくなってしまうので、利用しているコンポーネントの一覧作成が必要だったのが作成動機。作成時間は60分。

ローカルにおいておくとなくすのでこちらにアップしておく。

2007/11/06 07:21:05 Delphi none Comments Tags: ,

単なるメモ。とあるソフトがイベントログを監視しているらしいのでその対応。

var
  Eventlog  : TEventLogger;
  str : string;
  eventType : Integer;
  category : Integer;
  id : Integer;
  source : string;
begin
  source := 'Security';
  str := 'セキュリティのカテゴリに監査成功を突っ込む';
  eventType := Windows.EVENTLOG_AUDIT_SUCCESS;
  category :=  0;
  id := 538;

  Eventlog  :=  TEventLogger.Create(source);
  try
    EventLog.LogMessage(str,eventType, category, id);
  finally
    Eventlog.Free;
  end;
end;

なお,usesにSvcMgrを追加しておく必要がある。

2005/04/13 12:54:49 Delphi none Comments Tags:

Delphiの良いところはコンポーネントが豊富なこと、ってことで色々見つけては試しているが、今日見つけたこれはなかなか良い。

ぷれぷれ電光掲示板

その名の通り文字列を電光掲示板方式で表示するコンポーネント。

2005/02/22 13:43:49 Delphi none Comments Tags:

ベータテストが開始してしばらくたつが、DB周りのエラー報告はなかなか出てこない。Nさんからは初期化して登録したらエラーが出るって連絡あるけど、ほかでは出ていないようだ。気持ち悪い。

でこのまま一般公開するとマズイかと思ってさらってみたら、理由がわかった。

原因はテーブル生成時のBDEの設定の問題で、Paradoxのテーブルサイズの制限は

ブロックサイズ*65535

なのだそうだ。そういえば昔はまったかも。

ということでブロックサイズはデフォルトでは2048なので

2048*65535/1024/1024=約127M

こりゃだめだ。

ということで早急に対策モジュールを作成。

自宅のDell Inspironでテスト。最近XPのSP2を適用してからマシンが突然死するようになって夜間放置すると朝にはきっちりw電源が落ちている。

ネットで検索したらノートPCの下に足をつけて通気性を向上させると解決するかも、とのことなので実験。

朝起きたらとりあえず正常に動作していた。

なんだかなぁ。

2005/02/15 13:46:28 Delphi none Comments Tags:

DelphiでMDIフォームのWindowメニューが消える

ので悩んでいたが、WindowMenu に指定するMenuItem に分割線を入れないようすればいいらしい。

Delphi5もいい加減バージョンアップすっかな。

2004/10/08 22:58:34 Delphi none Comments Tags:

最近またDelphiを触っている。

今の会社に転職する前はパッケージソフトの構築をしていてDelphiを良く触っていたんだけど、Web系のシステム構築が多くなっからぜんぜん触っていなかったので約5年ぶりくらい。久々に昔のソースコード見てみたら、コメントに1998年とか1999年とか書いてある。この世界で考えたら浦島太郎なコードだよw。んで内容を見るとあまりにレベルが低い。オブジェクト指向言語を何故名前のCみたいに書いてたんだ?>俺

自分では気づかないうちに成長してるみたい。

そういうもんかにぃ。

今日のキーワード

SQLite

 →Delphiでも使えるオプソなDB

GEXPERTS

 →DelphiのIDE用の便利ツール

 

日記 PHP オープンソース インストールマニアックス IIS Trac MySQL Perl Linux Agile・生産性向上 wordpress フリーソフト 自宅サーバ 書評 ブックマーク phpMyFaq TraM Plugin 早起き Delphi apache CakePHP Firefox Ruby eclipse セキュリティ プラグイン アジャイル mojavi Subversion Ajax/Web2.0 SQLServer Zope サーバ フレームワーク phpBB 仮想化 PostgreSQL OpenVZ scuttle CMS 文字化け 自宅 翻訳・日本語化 ApacheDS LDAP Excel 生産性向上 CodeIgniter XAMPP hacks taskfreak 修正 言語ファイル Ajax SBM ダウンロード HTML::FillInForm mod_security 情報共有


ads

読まなきゃモグリ