Sunday, January 13, 2008

自前の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:

Anonymous ひろしまなおき said...

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

2:39 PM  

Post a Comment

Links to this post:

Create a Link

<< Home