From: Kazuhiro Yoshida Date: 2001-05-17T02:53:18+09:00 Subject: [ruby-talk:15304] Re: Delphi and Ruby? もりきゅうです。 Nishio Mizuho wrote: > http://apollo3.sourceforge.net/index-en.html Apollo lastest version is ap-624b. Ruby/Delphi via Apollo sample: 1. bar.dpr - best simple Ruby extension library -----^bar.dpr library bar; procedure Init_bar; begin end; exports Init_bar; end. -----$bar.dpr C:\tmp>dcc32 bar C:\tmp>ruby -rbar -e 0 C:\tmp>del bar.dll C:\tmp>ruby -rbar -e 0 0: No such file to load -- bar (LoadError) 2. baz.dpr - The "Hello, World!" example -----^baz.dpr library baz; uses Rubies; var mHello: Tvalue; function Hello_world_bang(This: Tvalue): Tvalue; cdecl; begin result := rb_str_new2('Hello, World!'); end; procedure Init_baz; begin mHello := rb_define_module('Hello'); rb_define_module_function(mHello, 'world!', @Hello_world_bang, 0); end; exports Init_baz; end. -----$baz.dpr C:\tmp>dcc32 baz /uc:\apollo\src C:\tmp>ruby -rbaz -e 'p Hello.world!' "Hello, World!" 3. cal.dpr - VCL wrapper example -----^cal.dpr library cal; uses Classes, ComCtrls, Rubies, Pythia; var cDateTimePicker: Tvalue; function ap_cDateTimePicker: Tvalue; stdcall; begin result := cDateTimePicker; end; procedure DateTimePicker_setup(obj: Tvalue; real: TDateTimePicker); begin // end; function DateTimePicker_alloc(This: Tvalue; real: TDateTimePicker): Tvalue; begin result := ChildAlloc(This, real); DateTimePicker_setup(result, real); end; function DateTimePicker_alloc_v(var AControl): Tvalue; begin result := DateTimePicker_alloc(cDateTimePicker, TDateTimePicker(AControl)); end; function DateTimePicker_new(argc: integer; argv: Pointer; This: Tvalue): Tvalue; cdecl; var real: TDateTimePicker; begin real := TDateTimePicker.Create(nil); result := CompoAlloc(This, real); CompoSetup(argc, argv, real); DateTimePicker_setup(result, real); rb_obj_call_init(result, argc, argv); end; procedure Init_cal; begin DefineConstSetType(ap_mPhi, TypeInfo(TDateTimeKind)); DefineConstSetType(ap_mPhi, TypeInfo(TDTDateMode)); DefineConstSetType(ap_mPhi, TypeInfo(TDTDateFormat)); DefineConstSetType(ap_mPhi, TypeInfo(TDTCalAlignment)); RegisterClass(TDateTimePicker); PhiAllocFuncList.AddObject('TDateTimePicker', @DateTimePicker_alloc_v); cDateTimePicker := rb_define_class('DateTimePicker', ap_cWinControl); DefineProp(cDateTimePicker, TDateTimePicker); DefineSingletonMethod(cDateTimePicker, 'new', DateTimePicker_new); end; exports ap_cDateTimePicker, DateTimePicker_alloc, Init_cal; end. -----$cal.dpr -----^c.rb require 'phi' require 'cal' form = Phi::Form.new dtp = Phi::DateTimePicker.new form form.show Phi.mainloop -----$c.rb C:\tmp>dcc32 cal /uc:\apollo\src /luvcl50 C:\tmp>ruby c.rb ---- YOSHIDA Kazuhiro moriq@moriq.com