12月のカレンダー
  12345
6789101112
13141516171819
20212223242526
2728293031  
最近の日記
全体の新着
各月の日記
ユーザーRSS
hanyaさんの公開日記
10月15日
00:05
#include <neko_vm.h> が正しいらしい。

相互の値の型を変換するためにマッピングを作成する。Neko の値は C では value 型の構造体に入れられている。値は自身の型を知っており、それらを参照して UNO 型の C++ での型に変換する。
基本的な型以外は後回し。

まずは、UNO の string 型の C++ での型、::rtl::OUString と Neko の (中身が文字列の) value 型に関わる、URL とシステムパスの変換などから手をつける。

Neko の primitive 関数は引数に Neko 関連のコンテキストなどを取らない。

次に UUID を生成する関数を書く。これは integer 型の値が必要なことに加え、配列が必要。

ここまで書ければ、基本的な値の変換はできるとみて間違いない。
Bool 型がない言語とかは知らない。


次はブートストラップして css.uno.XComponentContext を取得する。ここから、C の値を Neko に持って行くことになる。Neko ではこのために Abstract 型が用意されている。
・・・試していて気づいたが、この abstract 型の値には Object のようにメソッドを設定できない。このまま利用しようとすると関数指向になってしまう。Lua の関数指向すぎなのよりも Neko の最初から一応オブジェクト指向ありを良い点だと思ったのに、それではつまらない。
ラッパーとしてオブジェクトを用意してそこに abstract 型でラップしたオブジェクトを設定しておくことにする。
Neko はオブジェクト指向があるといっても、クラスを定義できない。卵 (クラス) がなくても鶏 (オブジェクト) は生まれる。また、Neko のオブジェクトはプロトタイプを利用できる。

プロトタイプ型のオブジェクト指向は少数派?らしい。SpiderMonkey (JavaScript) もプロトタイプ型だった。内部ではクラス型があるが、コードではクラスがなく、関数から new キーワードでインスタンスを生成するのが JavaScript (SpiderMonkey の)。ECMA を全部読んでいないので詳しくありません。

var proto = $new(null);
proto.put = function () {$print(this.x);};

var a = $new(null);
a.x = 100;
$objsetproto(a, proto); // a にプロトタイプとして proto を

a.put(); // -> 100

a に put メソッドがないとき、プロトタイプから検索される。

ラッパーのオブジェクトは Neko で書くことにする。
alloc_object で新しいラッパーオブジェクトを作成、alloc_abstract で作成した中身を設定。プロトタイプを設定する関数を探したが、見つからなかったので適当に。

さて、Neko のコードから C の primitive をロードして、その関数で ::cppu::defaultBootstrap_InitialComponentContext() 。
=>css::registry::InvalidRegistryException

URE_BOOTSTRAP も合っているし、テスト用にコードを書いて同じコンパイルフラグ、リンクするライブラリなどをチェックしたが問題ない。Neko を通すと何かが悪さをするらしい・・・。
公開日記トップへ
oooug-jp SNS

●サイドメニュー

  • 公開日記
  • >公開日記はログインしなくても読めます

http://www.ospn.jp/

inetd