スポンサーサイト

--年--月--日 --:--

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

LS2CAPI: 型を変換する

2009年12月09日 00:04

- バックナンバー -
1. OSLoadProgramを呼んでみるサンプル
2. OSLoadProgramのサンプルを理解する
3. C API はnnotes.dllから呼ばれている
4. 参照渡しか値渡しか
5. 型を変換する
6. 構造体を定義する
7. OSLoadString を使ってみよう

 C API 関数を呼び出す上で次に必要になるのはC言語での型からLotusScriptの型に変換する方法です。
先に結論から言ってしまうと、実際的には以下のようなサイトから変換表を借りるのが一番省エネな方法なのではないかと思います。

Translating API Data Types to LotusScript (nsftools)

ただ、一度どのようにこれらの変換を考えるかはゆっくり精査してみるといいと思います。
たとえば、ここの表を見ると、Windows などでよく使われるDWORD型はLotusScriptではLong型に対応付けられています。

DWORD というのは一般的には unsigned long なので、 0 ? 4294967295 までの数を表します。
LotusScriptでのLongデータ型は、 -2,147,483,648 以上 2,147,483,647 以下の整数なので厳密にはマッチしません。
ただ、デザイナーヘルプをよく見てみると、「引数を C 関数へ引き渡す」と言う項にLongデータ型はC関数に渡すときに「4 バイトの Long 型の値が呼び出しスタックに push されます」とあるので、LotusScriptのLong型はマイナス値を渡したときの振る舞いはよく分からないですが、正の値を渡している場合には4バイトの数として扱ってくれるようです。一般的にはNotesに限らずAPI呼び出しなどを行う場合にこのようなことをするとクラッシュしてしまいます。
 この辺については色々理屈にこだわるより慣習に従った方がいいのではないかと思います。。

あとはたとえばC APIでは「STATUS型」などを関数の戻り値にしているのをよく見かけます。
こういうのを見かけたら、API リファレンスを探してみましょう。ちゃんと「STATUS」と言う項目に以下のような説明があるのが分かります。

Definition :
typedef WORD STATUS;

つまり、これは WORD型 = unsigned short と同じ、Integer型になっているのが分かると思います。
と言うわけで型変換は毎回一からやっているととても大変なのでこのようなものは書き溜めておくと便利なのではないかと思います。

また、LotusScriptの型はC 言語ほど豊富ではないのでLotusScriptからC API関数を呼び出すことはある程度技術的にも限界があることなんだ、と言う事は念頭に入れた上で挑戦してみたほうがよいと思います。
ブロガーの方が試行錯誤した上で色々な型変換の表を色々なところで公開してもらえると楽しそうですよね。



コメント

    コメントの投稿

    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://hnagasim.blog8.fc2.com/tb.php/284-7a7855f9
    この記事へのトラックバック


    最新記事


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