自前のCプログラムをRubyCocoaから呼ぶ
      Objective-CのメソッドをRubyCocoaから呼ぶのはとても簡単である。
πを計算する以下のようなクラスが存在するとき、
    πを計算する以下のようなクラスが存在するとき、
#import <Cocoa/Cocoa.h>
@interface Pi : NSObject
- (double)calc:(id)param;
@end
@implementation Pi
- (double)calc:(id)param
{
  // すごい方法でπを計算
  return 3.14159265358979;
}
@end
Xcodeを使ってこれからPi.frameworkを作成し、
/Library/Frameworksとかに置いておけば
以下のように簡単にRubyから呼び出すことができる。
require 'osx/cocoa'
include OSX
NSBundle.bundleWithPath("/Library/Frameworks/Pi.framework").load
ns_import :Pi
class Pi < NSObject
  addRubyMethod_withType('calc', 'v@:@')
end
pi = Pi.alloc.init
puts pi.calc(nil)
自前のCプログラムをすぐにRubyから使えるので便利である。
    

1 Comments:
bundle を使うとさらに簡単です。
$ cat pi.m
#import <Cocoa/Cocoa.h>
@interface Pi : NSObject
@end
@implementation Pi
+ (double)calc:(id)param
{
// すごくない方法でπを計算
return 3.14159265358979;
}
@end
void Init_pi() {}
$ gcc pi.m -o pi.bundle -bundle -framework foundation
$ cat test.rb
require 'osx/cocoa'
require 'pi'
p OSX::Pi.calc(nil)
$ ruby test.rb
3.14159265358979
Post a Comment
Links to this post:
Create a Link
<< Home