Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

拡張ライブラリ

カタログ

拡張ライブラリのメソッドコードのカタログを作成します。 とりあえず Method Code Catalog こんな感じで考えてます。これはたいへんだ。^^; うまく自動化できれば良いのですが。

[ap-list:2988] Ruby から Delphi に変換する仕方

たけ(tk)です

[Apollo-talk:54] で "repeater" さんから Ruby のスクリプトを高速化するた めに Delphi で書きなおすためにはどうすればよいのか?

it is customary to rewrite pieces of ruby code that slows your application down in C. can delphi be used instead?

という質問があったので、超簡単なサンプルを回答しておきました。Delphiがら みなので ap-dev にしようかと思ったけれど、超基本的な内容なのでこちらにし ました。Rubyで作ったスクリプトでボトルネックがあるような場合には参考にし てください。


//-- add_pas.dpr
//-- A sample of how to convert Phi::add_pas in a Ruby script to DPR

library add_pas;  // library_name .. require "add_pas"

(****

In Delphi menu..
(1) Project - Option - Directory
  Output Directory      : c:\program files\apollo\lib
  Unit output directory : c:\program files\apollo\tmp
  Search Path           : c:\program files\apollo\src

  Definition            : VCL

(2) Project - Option - Packege
  Use runtime package   : YES

****

#-- add_pas.rb
require "phi"
module Phi
  def self.add_pas(a,b)  # Phi::add_pas
    a+b
  end
end

#-- test.rb
require "phi"
require "add_pas.so" ## ignore add_pas.rb if exist
p Phi.add_pas(1,2) #=> 3

****)

uses Classes, ComCtrls, Rubies, uDefUtils, Pythia;

{$E so}

//  def self.add_pas(a,b)  # Phi::add_pas
//    a+b
//  end
//  vvvv
function Phi_add_pas(This,a,b: Tvalue): Tvalue; cdecl; // need cdecl
begin
  result := ap_Integer(dl_Integer(a) + dl_Integer(b));
end;

procedure Init_add_pas;
begin
// require "phi"
//  vvvv
  if ap_mPhi = 0 then ap_loaderror('undefined Phi module');

//module Phi
//  def self.add_pas(a,b)  # Phi::add_pas
//  vvvv
  rb_define_singleton_method(ap_mPhi, 'add_pas', @Phi_add_pas, 2); // Phi::add_pas

//  rb_define_method(ap_mPhi, 'add_pas', @Phi_add_pas, 2);         // Phi#add_pas
end;

exports
  Init_add_pas;  // library_name .. attention to upper/lower case.

end.

take_tk = kumagai hidetake Kopen Cialis バイアグラ 輸入品

Last modified:2011/07/19 16:48:09
Keyword(s):
References:[Apollo] [SideMenu] [解決したい問題]