自前の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; } @endXcodeを使ってこれから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