スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

lobjcをGNUstepで動かす

一番大きな問題は、ランタイムが違うことだ(NeXT↔GNU)。といっても名前が違うだけなものもけっこうあるので、そういうのは#defineしてやればいい。構造体のフィールドへのアクセサは素直に書けばいい。そうでない関数は、自分で書いてやる必要がある。

というわけで、ランタイムの違いを吸収するヘッダを書く。クラスの追加、メソッドの追加、インスタンス変数の追加は対応する関数が見つからない。後ろ二つはClassのフィールドをいじってやればよさそう。クラスの追加は問題だが、後回しにする。

さて、一応コンパイルが終わって、実行してみるが、謎のエラーが出た。

$ lua -lobjc
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> =objc.classes.NSString
: Uncaught exception NSInvalidArgumentException, reason: NSString(class) does not recognize dataUsingEncoding:allowLossyConversion:
アボートしました

他にも謎な症状がいっぱい出て困ったけど解決したので結論だけ書くと、NeXTのobject_getClassとGNUのobject_get_classの挙動の違いが原因だった。NeXTのはクラスを渡すとメタクラスが返ってくるが、GNUのはそのクラス自身が返ってくる。名前に騙された。

これで一応動くようになった訳だが、まだ問題は残っている。GNUstepにはBridgeSupportに対応するものが無いため、例えば、BOOLを返すメソッドが、true/falseではなく1/0を返す。BridgeSupportのメタデータを自分で生成すればいいのかな。

スポンサーサイト

テーマ : プログラミング | ジャンル : コンピュータ

tag : GNUstep

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。