OSLoadProgramを呼んでみる

2009年10月06日 00:37

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

さて、LotusScript では外部DLLの関数を呼ぶ事が出来る事はご存知でしょうか。

そこで、まずはNotesのC API関数であるOSLoadProgramを呼ぶサンプルをチュートリアル代わりに書いておきます。 C:\temp フォルダにある newfile.txt をノートパッドで開くサンプルです。


Declare Function OSLoadProgram Lib "nnotes.dll" _
(Byval filename As String, Byval FileDir As String, Byval argv As String, flags As Integer) As Integer

Sub Click(Source As Button)
Call OSLoadProgram ("c:\windows\notepad.exe", "c:\temp", "newfile.txt",0)
End Sub

This LotusScript was converted to HTML using the ls2html routine,
provided by Julian Robichaux at nsftools.com.


LotusScript に明るい方ならこのサンプルに実用的な意味がほとんどないことにすぐ気が付くと思います。別にShell関数でこのくらい出来ますよね。
単純にLotusScriptからAPIを呼ぶ事が出来る、と言う事を技術的に示しただけです。

色々話す前にサポート的なことを言っておくと、サポートの観点ではAPI関数を呼んで必要な機能を実現するなアプリケーションは可能な限り避けた方がいいと思います。極端な話を言えば、たとえやり方を知らなくても、APIを呼ばなければ出来ないような事はやらない、と言う姿勢は間違ってない気がします。
 他にもPortabilityの問題も考えなくてはいけません。 同じ要領でW32 APIを呼ぶ事も出来ますが、たとえばXPとVistaと2000で同じ動きをするのか分からなくなったりしますし、本来NSFファイルはどのプラットフォームのドミノでも動かせますがこのような処理が入っていると、Windows用に書いたら各プラットフォーム用にDLLとかライブラリ名を変えないといけないので書き換えないといけません。
(この辺はもちろんテクニックがありますが。)
 更に言うとAPIを直接呼ぶ場合には間違って呼べばLotusScriptのようにランタイムエラーでは済まないのですぐクラッシュしてしまいます。この辺はとにかくクラッシュさせるのはそのDLLがおかしい、と考える人もいますが、事実Notes に限らず、他の言語でも API関数を直接呼ぶ場合はほとんどの場合そうなってしまうので、これは呼び出し側が気をつけるしかありません。
LotusScriptの下位互換性も呼び出したAPIに対しては保証できないので、マイグレーション時も特に気をつける必要があります。

と言うわけで今日のところは導入だけでこれから少しずつどういう風にAPI関数を呼び出していくのか紹介していこうと思います。

ちょっと変わったネタなのですが、興味を持った方は拍手でもお願いします。
反応薄かったらあと1,2回くらいで一段落つくので、止めておきます。



コメント

    コメントの投稿

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

    トラックバック

    この記事のトラックバックURL
    http://hnagasim.blog8.fc2.com/tb.php/244-2f5835a9
    この記事へのトラックバック


    最新記事