ここでは次のトピックを説明します。
VBScript: Set bobj = Server.CreateObject("basp21pro") JScript: var bobj = Server.CreateObject("basp21pro");BASP21 Proインスタンスは、ASP Session オブジェクトおよび Application オブジェクトには 格納しないでください。
'wrong usage: Set bobj1 = Server.CreateObject("basp21pro") Set bobj2 = Server.CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Nothing 'right usage: Set bobj1 = Server.CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Server.CreateObject("basp21pro") Set bobj2 = Nothing
bobj.method name parameterrefer to BASP21 Pro referencefor BASP21 Pro methods parameters may vary depending on methods.
bobj.property name = parameterrefer to BASP21 Pro Reference.for BASP21 Pro properties.
Env propertycan configure the environment for BASP21 Pro objects It makes script simple by configuring paramaters that vary on environments by using Env property. Use Env property as follows.
bobj.Env = "env name" bobj.Env = "*"env name is one of the section names in BASP21P.INI file Specifying "*" can make it current security context(user acount) name. If using IIS anonymous connection,the env name is "IUSR_machine name"
example of BASP21P.ini file to configure the default value of SendMail method.
bobj.Env = "iis5" mailto = "hoge@basp21.com" subj = "document" body = "Hello!" & vbCrLf & "this is a document." files = bobj.Home & "\good.doc" bobj.SendMail mailto,subj,body,files basp21p.ini file [global] allow=env inifileversion=500 license=GT20000301 [iis5] allow=sendmail server=smtp-server mailfrom=your@basp21.com home=c:\test\iis5 [IUSR_MACHINE] allow=sendmail server=smtp-server mailfrom=your@basp21.comsmtp-server is selected as SMTP server,and your@basp21.com is used for mailfrom address by SendMail method described above.
you can also dynamicaly specify SMTP server name and mailfrom address dynamically.
bobj.Server = "smtp-server2" bobj.MailFrom = "her@basp21.com" bobj.SendMail mailto,subj,body,files
You can specify home directory name using home parameter The directory name specified by home paramater can be reffered using period by the parameter that specify other directory name. It is created at execution of Env configuration, if no directory is specifed by home parameter,mailbox parameter,mailqueue paramater,monitor parameterパラメータで
[user1] deny=execute,showdialog,fireevent home=c:\app1\user1 mailbox=.\mailbox mailqueue=.\mailqueue monitor=.\mon
BHELPER.EXEをv オプションで起動するとEnv名に 対応するパラメータ一覧をダイアログ表示できます。 コマンドプロンプトで以下のように -e パラメータで確認したいEnv名を指定します。
bhelper -e iis5 -v
Trapプロパティは、エラー発生時にスクリプトを中断することができます。
bobj.Trap = 1 bobj.SendMail mailto,subj,body,files
IsErrorプロパティは、メソッドがエラーかどうか判定します。
bobj.SendMail mailto,subj,body,files If bobj.IsError Then msg = bobj.LastMsg End If
basp21p.iniファイル [global] allow=env inifileversion=500 license=GT20000301 [iis5] deny=rcvmail,readmail server=smtp-server mailfrom=your@basp21.com [upload] allow=formsaveas,form注意:ひとつのEnv内でallowパラメータとdenyパラメータを同時に指定できません。
BASP21 Proオブジェクトがファイルやディレクトリのアクセスに失敗するときは、 "IUSR_マシン名"アカウントがターゲットに適切なアクセス権を持っているかどうか確認してください。
BASP21 Proには、メソッドを別プロセスで実行する以下の機能があります。
BHELPER.EXEは、BASP21 Proオブジェクトをラップした Win32アプリケーションです。 Windows NT/2000 のATコマンドとBHELPER.EXE を組合わせて使うと、 BASP21 Proメソッドをスケジュールして実行することができます。 次の例は、毎週金曜日の18:00にFlushMailメソッド をATコマンドで実行します。at 18:00 /every: f /interactive bhelper -e env1 flushmailProcessメソッドは、指定したメソッドを別プロセスで実行します。 次の例は、送信メールキューが20通になったらFlushMailメソッドを別プロセスで実行します。
If 20 < bobj.FileCheck(bobj.MailQueue,1) Then rc = bobj.Process("-e test FlushMail") End Ifサーバサイドで別プロセスで実行中のメソッドの進捗状況を確認したり処理をキャンセル する機能はオブジェクトモニターと呼ばれます。
Monitorメソッドを使用すると、 現在の他のBASP21 Proオブジェクトの実行状況に関する情報を取得できます。 同じmonitorパラメータを持つ環境で実行されている オブジェクト単位に情報が取得されます。 monitorパラメータが指定されている場合、monitorパラメータのディレクトリ上に、 メソッドの進捗状況をスレッド単位にモニターファイルに書出します。 サーバサイドで実行中の処理時間が長いメソッドをモニターしたい場合に使うと便利です。
以下のASPページは、BASP21 Proオブジェクトの状況をスレッド単位に5秒ごとに表示します。
<html><head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> <META HTTP-EQUIV="Refresh" CONTENT="5"> <title>Monitor Page</title></head> <body> <% set bobj = Server.CreateObject("basp21pro") c = Now() bobj.Env ="env2:" & c out = bobj.Monitor() rc = bobj.Result If rc > 0 Then For Each data in out line = Split(data,vbCrLf) For Each item in line a = a & "<td>" & Server.HTMLEncode(item) & "</td>" Next a = "<tr>" & a & "</tr>" Next Else a = "" End If Response.Write "<table border=1 CELLSPACING=0 CELLPADDING=3>" Response.Write "<tr><th>TID</th><th>Status</th><th>Start-Time" & _ "</th><th>Log</th><th>Progress</th></tr>" Response.Write a Response.Write "</table>" %> </body></html>
Cancelメソッドを使って、 他のスレッドで実行中のメソッドをキャンセルすることもできます。
ログファイル指定
ログファイル名は、BASP21P.INIファイルのlogfileパラメータで
指定します。[global]セクションでlogfileパラメータを指定するか、
Env名で専用のlogfileパラメータを指定すれば、そのEnv名で実行するメソッド、プロパティの
エントリのみを該当のログファイルに振り分けることができます。
logfileパラメータがないEnv名の場合は、[global]エントリのlogfileパラメータが選択されます。
[global] logfile=c:\app1\mainlog.txt logfilerotate=1024 allow=env [env1] logfile=c:\app1\env1\log.txt logfilerotate=1024 allow=all [env2]logrotateパラメータでログファイルの最大サイズを 指定します。ログファイルが最大値に達したとき、別名で以前のログファイルが保存されます。 大きさを指定しないと無制限となりログファイルアクセス時のパフォーマンスに 悪影響を及ぼしますので必ず指定してください。
ログファイルの形式
ログファイルの形式は、ログレコードを参照して
ください。
ログエントリ内の区切り文字をlogcsvパラメータ
で選択することができます。
ログレベル
ログエントリの書出しレベルは、loglevelパラメータを参照して
ください。
ログエントリにクライアントのIPアドレスを含めるには
ログエントリには、Env名が記録されるので、Envプロパティ設定時に ":" で区切って
IPアドレスを指定します。
bobj.Env = "IIS5:" & Request.ServerVariables("REMOTE_ADDR")
エラー時のログエントリを別ファイルに記録するには
errorlogfileパラメータを使うとエラーの
ログエントリを別ファイルに記録することができます。
errorlogfile=.\err.txt errorlogfilerotate=1024
ユーザログ
ログエントリには、PutLogメソッドでユーザデータを
記録可能です。
bobj.PutLog "mailaddr = " & mailaddr
ログ読み出し
ReadLogメソッドでログファイルを読み出すことができます。
c=now() ' 開始時刻 bobj.Env="tatsuo:" & c ' 開始時刻をマーカーとしてログに書く bobj.DebugClear 3 bobj.Debug bobj.ReadLog(0,-50,c,50) ' マーカーを持つログを出力
PutLogメソッドを使うと任意のデータを ログエントリとしてログファイルに書き込むことができます。 ReadLogメソッドで書き込んだログエントリを 簡単に取得できます。
c=now() ' 開始時刻 bobj.Env="iis5:" & c ' 開始時刻をマーカーとしてログに書く .............. bobj.Putlog datax ' デバッグ情報 ............... Response.Write bobj.ReadLog(0,-50,c,50) ' マーカーを持つログをページ出力
BASP21 Proのメソッドおよびプロパティは、IEがサポートするスクリプトから使うことができます。 スクリプトの記述には、さまざまなスクリプト言語を使用できますが、 Microsoft Visual Basic Scripting Edition (VBScript) と Microsoft の ECMAScript 言語である JScript(NetscapeブラウザはJavaScriptのみサポートしています) の 2 つが最も一般的なスクリプト言語です。 1 つの Web ページに含まれる各スクリプトに対して、異なる記述言語を使用することも可能です。 ブラウザの種類を検出するスクリプトの記述に JScript が使われるようです。 Netscape Navigator でもBASP21 Proを使う場合は、JScriptを選択したほうがいいでしょう。
ここでは次のトピックを説明します。
<OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6" CODEBASE="BASP21P.CAB#version=1,0,4,2"> <PARAM NAME="Env" VALUE="ie4"> </OBJECT> |
項目 | 説明 |
ID | オブジェクトにつける任意なID。 |
CLASSID | BASP21 ProオブジェクトのクラスID。 |
CODEBASE |
BASP21 Proのダウンロード場所を示すURL。 versionを指定しておくとIEの機能によりパソコン上のBASP21 Proのバージョンが古い場合に 常に新しいバージョンがインストールされます。省略可能です。 |
PARAME NAME | 初期化時にBASP21 Proオブジェクトに渡すパラメータ。Envプロパティのみが指定できます。 |
【イベントプロシージャ】
BASP21 Proイベントプロシージャは、オブジェクト名 + _(アンダーライン) + イベント名で指定します。
【サンプル】
<HTML><HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> <TITLE>BASP21 Pro Web Page</TITLE><BODY> <OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6" CODEBASE="BASP21P.CAB#version=1,0,4,2"> <PARAM NAME="Env" VALUE="ie4"> </OBJECT> <SCRIPT> Sub download_onClick() bobj.ShowDialog = 1 bobj.FireEvent = 1 rc = bobj.DownLoad("http://basp21.com/b21soft/bnewslog.lzh",bobj.home + "\log.lzh") End Sub Sub upload_onClick() bobj.ShowDialog = 2 rc = bobj.UpLoad("http://basp21.com/upload.php3",bobj.home) End Sub Sub rcvmail_onClick() bobj.ShowDialog = 3 rc = bobj.RcvMail("","","saveall") status = bobj.result End Sub Sub bobj_OnLog(log) status = log End Sub Sub bobj_OnProgress(msg,current,total) status = msg End Sub </SCRIPT> <input type=button name=download value=DownLoad> <input type=button name=upload value=UpLoad> <input type=button name=rcvmail value=RcvMail> </BODY></HTML> |
JScript は、NetscapeブラウザのJavaScriptと互換性のあるスクリプト言語です。
【イベントプロシージャ】
JScriptではBASP21 Proイベントプロシージャは、次のように指定します。
<SCRIPT FOR="オブジェクトID" EVENT="イベントプロシージャ名" LANGUAGE="JavaScript"> </SCRIPT>
【サンプル】
<HTML><HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> <TITLE>BASP21 Pro Web Page</TITLE><BODY> <OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6" CODEBASE="BASP21P.CAB#version=1,0,4,2"> <PARAM NAME="Env" VALUE="ie4"> </OBJECT> <script language="JavaScript"> var rc; function ondownload() { bobj.ShowDialog = 1; bobj.FireEvent = 1; bobj.DownLoad("http://basp21.com/b21soft/log.lzh",bobj.home + "\\log.lzh"); } function onupload() { bobj.ShowDialog = 2; bobj.UpLoad("http://basp21.com/upload.php3",bobj.home); } function onrcvmail() { bobj.ShowDialog = 3; bobj.RcvMail("","","saveall"); status = bobj.result; } </script> <SCRIPT FOR="bobj" EVENT="OnLog(log)" LANGUAGE="JavaScript"> status = log; </SCRIPT> <SCRIPT FOR="bobj" EVENT="OnProgress(msg,current,total)" LANGUAGE="JavaScript"> status = msg; </SCRIPT> <input type=button name=download value=DownLoad OnClick="ondownload()"> <input type=button name=upload value=UpLoad OnClick="onupload()"> <input type=button name=rcvmail value=RcvMail OnClick="onrcvmail()"> </BODY></HTML> |
進捗ダイアログを表示するには、 ShowDialogプロパティを使います。 ダイアログ表示位置も選択可能です。
bobj.ShowDialog = 3; // 中央に表示 bobj.DownLoad("http://basp21.com/b21soft/log.lzh",bobj.home + "\\log.lzh");
bobj.FireEvent = 1; bobj.DownLoad("http://basp21.com/b21soft/log.lzh",bobj.home + "\\log.lzh");
OBJECTタグ <OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6" CODEBASE="BASP21P.CAB#version=1,0,4,2"> <PARAM NAME="Env" VALUE="ie4#3"> </OBJECT> BASP21P.INIファイル [global] inifileversion=2 inifileurl=http://www.basp21.com/data/basp21p.ini [ie4]
パソコンへ自動インストールするには、CABファイルと呼ばれるインストールファイルが必要です。 CABファイルは、インストールする複数ファイルをひとつにまとめた圧縮ファイルです。 BASP21P.CABファイルを作成するには、 BASP21P.CAB ファイル作成方法を参照してください。
インストール用htmlファイルは、次のようにOBJECTタグにBASP21 Proを含む HTMLテキストファイルです。
<HTML><BODY> <OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6" CODEBASE="BASP21P.CAB#version=1,0,4,2"> </OBJECT> </BODYL></HTMLY>インストール用htmlファイルは、インストール目的のみに用意する必要はありません。 エンドユーザに意識させないようにトップページ内にOBJECTタグを埋め込んでおいたり、 BASP21 Proを使うページでインストールを実行させてもかまいません。
自動インストール時は、IE のセキュリティーレベルを中に設定しておいて下さい。
自動インストールが完了すると次の3つのファイルがWindows\systemディレクトリ (NT/2000 の場合はwinnt\system32)にコピーされます。
注意:CABファイルによる自動インストールではBASP21 Proをインストールする ディレクトリを指定できません。
BASP21P.CABファイルを作成するには次の手順で行います。
このファイルは、自己解凍形式ですのでダブルクリックして解凍します。 解凍したディレクトリのbinサブディレクトリのCABARC.EXEを適当なディレクトリ(例:c:\basp21cab)にコピーします。 BASP21P.CABファイル作成に必要なファイルは、キャビネット開発キットのうちでCABARC.EXEのみです。
以下の BASP21P.INF ファイルをCABARC.EXEをコピーしたディレクトリ (例:c:\basp21cab)にコピーします。
[version] signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] BASP21P.dll=BASP21P.dll Bhelper.exe=Bhelper.exe basp21p.ini=basp21p.ini [BASP21P.dll] file-win32-x86=thiscab RegisterServer=yes clsid={EC0C18A0-4D5E-11D4-896C-00000E4E0AD6} DestDir=11 FileVersion=1,0,x,x [Bhelper.exe] file-win32-x86=thiscab RegisterServer=no DestDir=11 FileVersion=1,0,x,x [basp21p.ini] file-win32-x86=thiscab RegisterServer=no DestDir=11 FileVersion=1,0,x,x ; end of INF fileFileVersionを現在のBASP21P.DLLのファイルバージョンに変更します。 BASP21P.DLLファイルのバージョン番号を取得するには、エクスプローラでファイルを右クリックします。 表示されたメニューの [プロパティ] をクリックし、ダイアログ ボックスの [バージョン情報] タブをクリックします。
"DestDir" は、ファイルのロード先ディレクトリです。"11" はシステム ディレクトリ WINDOWS\SYSTEM または WINNT\SYSTEM32 を示します。 BASP21P Pro は、システムディレクトリに配置する必要があります。
"clsid" は、BASP21 Pro ActiveXコントロールの CLSID です。
以下の BASP21P.INI ファイルをCABARC.EXEをコピーしたディレクトリ (例:c:\basp21cab)にコピーします。
[global] license=your-license inifileversion=1 inifileurl=http://basp21.com/data/basp21p.ini allow=env
c:\basp21cab\CABARC -s 6144 BASP21P.CAB BASP21P.DLL BHELPER.EXE BASP21P.INI BASP21P.INF
作成されたBASP21P.CAB ファイルの内容は、BASP21P.DLL BHELPER.EXE BASP21P.INI の 圧縮バージョンと、BASP21P.INF で圧縮ファイルを抽出するのに必要な情報です。
-s オプションは、キャビネット内にコード署名用のスペースを確保します。
【VBScript】
インスタンス作成 set bobj = WScript.CreateObject("basp21pro"[,"basp21pro_"]) 解説 WscriptオブジェクトのCreateObjectメソッドでBASP21 Proのインスタンスを作成します。 WscriptオブジェクトのCreateObjectメソッドの第2パラメータは、イベントハンドラーの プリフィックス名を指定します。プリフィックス名は、アンダーラインで終了しなければなりません。 注意:BASP21 Proインスタンスは、同一スクリプトからは同時に2個以上作成できません。 '誤った使い方: Set bobj1 = WScript.CreateObject("basp21pro") Set bobj2 = WScript.CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Nothing '正しい使い方: Set bobj1 = WScript.CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = WScript.CreateObject("basp21pro") Set bobj2 = Nothing 使用例 set bobj = WScript.CreateObject("basp21pro","basp21pro_") bobj.Env = "env1" bobj.FireEvent = 1 bobj.DebugClear 1 rc = bobj.DownLoad("http://basp21.com/index.html","c:\test1\index.html") bobj.Debug rc & " " & bobj.LastMsg Set bobj = Nothing Sub basp21pro_OnProgress(msg,total,current) bobj.Debug msg End Sub WScript.Quit
【JScript】
インスタンス作成 var bobj = new ActiveXObject("basp21pro"); 解説 JScript では、ActiveXObjectオブジェクトでBASP21 Proのインスタンスを作成します。 イベントハンドラーの設定は、WscriptオブジェクトのConnectObjectメソッドを使います。 使用例 var bobj = new ActiveXObject("basp21pro"); WScript.ConnectObject(bobj,"basp21pro_"); bobj.Env = "env1"; bobj.FireEvent = 1; bobj.DebugClear(1); rc = bobj.DownLoad("http://basp21.com/index.html","c:\test1\index.html"); bobj.Debug(rc & bobj.LastMsg); delete bobj; function basp21pro_OnProgress(msg,total,current) { bobj.Debug(msg); }
Dim bobj As basp21p Set bobj = New basp21pオブジェクト型として宣言されるオブジェクト変数を CreateObject 関数で使用して、 実行時バインディングでオブジェクト変数を初期化する方法もあります。
Dim bobj As Object Set bobj = CreateObject("basp21pro")注意:BASP21 Proインスタンスは、同一スクリプトからは同時に2個以上作成できません。
'誤った使い方: Set bobj1 = CreateObject("basp21pro") Set bobj2 = CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Nothing '正しい使い方: Set bobj1 = CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = CreateObject("basp21pro") Set bobj2 = Nothing
使用例 フォームのボタンが押されたらセルにBASP21 Pro のバージョンを設定します。 Private Sub CommandButton1_Click() Dim bobj As basp21p Set bobj = New basp21p ActiveSheet.Cells(1, 1) = bobj.Version End Sub
Dim bobj As basp21p Set bobj = New basp21pオブジェクト型として宣言されるオブジェクト変数を CreateObject 関数で使用して、 実行時バインディングでオブジェクト変数を初期化する方法もあります。
Dim bobj As Object Set bobj = CreateObject("basp21pro")注意:BASP21 Proインスタンスは、同一スクリプトからは同時に2個以上作成できません。
'誤った使い方: Set bobj1 = CreateObject("basp21pro") Set bobj2 = CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Nothing '正しい使い方: Set bobj1 = CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = CreateObject("basp21pro") Set bobj2 = Nothing
使用例 フォームのボタンが押されたらBASP21 Pro のバージョンを表示します。 Private bobj As basp21p Private Sub Command1_Click() Command1.Caption = bobj.Version End Sub Private Sub Form_Load() Set bobj = New basp21p End Sub
#import "c:\\basp21p\\basp21pro.tlb" no_namespace#import は、C++ ソース コードでタイプ ライブラリの内容を再構築する 2 つの ヘッダー ファイルを作成します。
basp21pro.tlh ...... プライマリヘッダファイル basp21pro.tli ...... セカンダリヘッダファイル使用例1 BASP21 Pro のバージョンと環境パラメータを表示します。
#import "c:\\basp21p\\basp21pro.tlb" no_namespace //........................ if (S_OK != CoInitialize(NULL)) return false; Ibasp21pPtr pIBasp21(__uuidof(basp21p)); _bstr_t envbstr = "env1"; pIBasp21->PutEnv(envbstr); _bstr_t retbstr = pIBasp21->GetVersion(); retbstr += "\r\n" + pIBasp21->GetEnv(); MessageBox(NULL,retbstr,"",MB_OK); CoUninitialize(); //................使用例2 ReadDirメソッドの戻り値の配列データにアクセスする方法。
Ibasp21pPtr pIBasp21(__uuidof(basp21p)); pIBasp21->PutEnv(OLESTR("env1")); _bstr_t para = "c:\\windows\\*.*"; _variant_t retv = pIBasp21->ReadDir(para); // _variant_ で戻り値を受け取る long rc = pIBasp21->GetResult(); if (rc <= 0) { _bstr_t msg = pIBasp21->GetLastMsg(); MessageBox(NULL,msg,NULL,MB_OK); return false; } int type,arraysize; // GetVariantArray の戻り値 char* data = GetVariantArray(retv,&type,&arraysize); // _variant_t から文字列に変換 // [in] _variant_t vval // [out] int *type 0: バイト配列 // 1: 文字配列 // [out] int *arraysize 配列数 // 戻り値 : バイト配列の場合:バイトデータ先頭アドレス // 文字列配列の場合:CRLF で区切られたデータ char *GetVariantArray(_variant_t& vval,int *type,int *arraysize) { _variant_t v = vval; VARTYPE vt = v.vt; *type = *arraysize = 0; // 参照タイプならアドレスを指定 if (vt == (VT_VARIANT | VT_BYREF)) { v = v.pvarVal; vt = v.vt; } if ( (vt & VT_ARRAY) == 0) // ARRAY タイプ以外? return NULL; SAFEARRAY *psa = v.parray; HRESULT hr; LONG cElements, lLBound, lUBound; // 1次元配列以外? if (SafeArrayGetDim(psa) != 1) return NULL; // 配列の開始位置 hr = SafeArrayGetLBound(psa, 1, &lLBound); if (FAILED(hr)) return false; // 配列の終了位置 hr = SafeArrayGetUBound(psa, 1, &lUBound); if (FAILED(hr)) return false; VARIANT *data; // 配列設定データアドレス hr = SafeArrayAccessData(psa, (LPVOID*)&data); if (FAILED(hr)) return false; // 配列数設定 *arraysize = cElements = lUBound-lLBound+1; if (vt & VT_UI1) { // バイト配列ならそのままコピー char *buff = new char[cElements+1]; if (buff == NULL) return NULL; memcpy(buff,data,cElements); buff[cElements] = 0; SafeArrayUnaccessData(psa); return buff; } *type = 1; // 文字列タイプ設定 int blen = 4096; int clen = 0; char *buff = new char[4096]; // 初期バッファー 4KB if (buff == NULL) return false; #define CRLF "\r\n" // 配列データを CRLF で区切って文字列としてコピー for (int i = 0; i < cElements; i++) { _bstr_t bx = data[i].bstrVal; // _bstr_t で受けると int len = lstrlen(bx); // クラスがascii自動変換してくれる if ((len + clen + 3) > blen) { // バッファーサイズオーバー? char *tp = new char[blen+4096]; // サイズを増やす if (tp) { memcpy(tp,buff,clen+1); delete [] buff; buff = tp; memcpy(buff+clen,(char*)bx,len); memcpy(buff+clen+len,CRLF,2); // 区切り文字 CRLF clen += len + 2; buff[clen] = 0; blen += 4096; } } else { memcpy(buff+clen,(char*)bx,len); memcpy(buff+clen+len,CRLF,2); // 区切り文字 CRLF clen += len + 2; buff[clen] = 0; } } SafeArrayUnaccessData(psa); return buff; }使用例3 Sortメソッドに配列データを渡す方法。
Ibasp21pPtr pIBasp21(__uuidof(basp21p)); pIBasp21->PutEnv(OLESTR("env1")); char *pdata[] = { "xx","bb","aa"}; // 配列データ _variant_t vb = PackBSTRArray(pdata,3); // VARIANT+SAFEARRAY 作成 if (!(vb.vt & VT_ARRAY)) // 作成 OK ? return false; int opt = 0,offset1 = 0,length1 = 0,offset2 = 0,length2 = 0; _variant_t retv = pIBasp21->Sort(vb,opt,offset1,length1,offset2,length2); // 文字列配列からVARIANT+SAFEARRAY 作成 VARIANT PackBSTRArray(char** data,int item) { VARIANT v; V_VT(&v) = VT_I4; // エラー時は、数字データを返す V_I4(&v) = 0; _variant_t vt; HRESULT hr; SAFEARRAYBOUND sabound[1]; SAFEARRAY * psa = NULL; sabound[0].cElements = item ; sabound[0].lLbound = 0; psa = SafeArrayCreate(VT_VARIANT, 1, sabound); //1次元のSAFEARRAY if (psa == NULL) return v; LPVARIANT rgElems; hr= SafeArrayAccessData(psa,(LPVOID*)&rgElems); //配列要素アドレス if (FAILED(hr)) return v; for (int i = 0;i<item;i++) { _variant_t bstr = data[i]; // BSTR 作成 rgElems[i] = bstr; // BSTR 設定 bstr.Detach(); // Detach } SafeArrayUnaccessData(psa); // 要素アクセスのアンロック VariantClear(&v); // VARIANT のSAFEARRAYタイプとして作成 V_VT(&v) = VT_ARRAY | VT_VARIANT; V_ARRAY(&v) = psa; // SAFEARRAYポインタを設定 return v; }使用例4 BinaryWriteメソッドにバイト配列データを渡す方法。
Ibasp21pPtr pIBasp21(__uuidof(basp21p)); pIBasp21->PutEnv(OLESTR("env1")); char pdata[] = "abcdefhghi"; _variant_t vb = PackByteArray(pdata,lstrlen(pdata)); if (!(vb.vt & VT_ARRAY)) return false; int mode = 0; _bstr_t fname = "c:\\temp\\data.txt"; long rc = pIBasp21->BinaryWrite(vb,fname,mode); _variant_t PackByteArray(char* data,int len) { VARIANT v; _variant_t vt; HRESULT hr; SAFEARRAYBOUND sabound[1]; SAFEARRAY * psa = NULL; sabound[0].cElements = len ; // バイト数 sabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1, 1, sabound); if (psa == NULL) { V_VT(&v) = VT_I4; // エラー時は数字タイプを返す V_I4(&v) = 0; vt = v; return vt; } unsigned char *rgElems; hr= SafeArrayAccessData(psa,(LPVOID*)&rgElems); if (FAILED(hr)) { // エラー時は数字タイプを返す V_VT(&v) = VT_I4; V_I4(&v) = 0; vt = v; return vt; } memcpy(rgElems,data,len); // バイト配列設定 SafeArrayUnaccessData(psa); // 要素アクセスのアンロック VariantClear(&v); // VARIANT のSAFEARRAYタイプとして作成 V_VT(&v) = VT_ARRAY | VT_UI1; V_ARRAY(&v) = psa; // SAFEARRAYポインタを設定 vt = v; return v; }
Processメソッドは、BHELPER.EXE を利用しています。
BHELPER.EXE は、次のような目的で使います。
BASP21 Proのメソッドは、プラグインからEMBEDタグのパラメータにより直接呼出します。
Navigator 4.x では、LiveConnect機能によりJavaScriptからBASP21 Proのメソッドと
プロパティを実行可能です。
注意:Navigator 3.x とNetscape6 ではJavaScriptからBASP21 Proメソッドと
プロパティを実行できません。
ここでは次のトピックを説明します。
<OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6"> <PARAM NAME="Env" VALUE="env1"> <EMBED NAME="bobj" TYPE=application/x-basp21-plugin ENV=env1 JAVA=no WIDTH=200 HEIGHT=300 DSTYLE=63 BGCOLOR=#ffffff FGCOLOR=#000000 BARCOLOR=#eeeeee BARBKCOLOR=#00ff00 START=Start CANCEL=Cancel AUTOSTART=yes EXEC='download http://server/test/hoge.dat,c:\temp\hoge.dat'> </EMBED> </OBJECT> |
項目 | 説明 |
NAME |
プラグインにつける任意なオブジェクト識別子。 JavaScriptからBASP21 Proオブジェクトにアクセスするときに使います。 |
TYPE | BASP21 ProプラグインのMIME ID。 |
ENV | BASP21 ProのEnvプロパティの初期値。 |
JAVA=yes|no |
JavaScriptからBASP21 Proオブジェクトにアクセスするときは、 yes を指定します。 |
WIDTH | プラグイン描画エリアの幅。 |
HEIGHT | プラグイン描画エリアの高さ。 |
DSTYLE |
表示スタイル。ブラウザ上にメソッドの進捗状況をコントロールとして描画 したいときに指定します。 表示したいコントロールを以下の数字の組合わせで指定します。 1 - 進捗状況テキストボックス1。 2 - 進捗状況テキストボックス2。 4 - 進捗状況テキストボックス3。 8 - プログレスバー。 16 - Start/Cancel ボタン。 32 - ログ表示テキストボックス。 |
BARHEIGHT | プログレスバーの高さ。 |
EDITHEIGHT | ログ表示テキストボックスの高さ。 |
BGCOLOR | 背景色を#RRGGBB形式で指定。 |
FGCOLOR | テキスト色を#RRGGBB形式で指定。 |
BARCOLOR |
プログレスバー色を#RRGGBB形式で指定。 Windows 95 では無視されます。 |
BARBGCOLOR |
プログレスバーの背景色を#RRGGBB形式で指定。 Windows 95 では無視されます。 |
SHOWDIALOG | BASP21 ProのShowDialogプロパティの初期値。 |
START | STARTボタンのキャプション文字。 |
CANCEL | CANCELボタンのキャプション文字。 |
EXEC |
プラグインから直接メソッドを呼出したいときに指定。 BASP21 Proメソッドを文字列で指定。 Navigator 3.x とNetscape6 ではこの方法でのみメソッドを実行可。 |
AUTOSTART |
EXECパラメータのBASP21 Proメソッドを自動実行したいときyes。 既定値は no。 |
STATUS |
ステータスバーに表示するEXECパラメータのBASP21 Proメソッドの実行結果
の出力フォーマット。%d がResultプロパティの値、%sがEXECパラメータの文字列。 既定値は、"%d - %s"。 |
- 3つのSTATICコントロール - プログレスバー - 開始/キャンセルボタン、 - ログ表示EDITコントロールDSTYLEパラメータで表示するコントロールを選択できます。
<EMBED NAME="bobj" TYPE=application/x-basp21-plugin ENV=env1 JAVA=yes HIDDEN>
EXEC='download http://server/test/data.xls,c:\temp' EXEC='upload http://server/iis/fileup.asp,"c:\temp dir"'EXECパラメータのメソッドは、AUTOSTART=yes パラメータでページ表示と同時に実行します。 または、DSTYLEパラメータでSTARTボタンを表示させてボタンクリックで実行できます。
bobj.setShowDialog(1); var a = bobj.getShowDialog();次にプロパティ設定取得関数を示します。大文字小文字を正確に記述してください。
setCodePage getCodePage setEnv getEnv setFireEvent getFireEvent setHome getHome getIsError getLastMsg setMailBox getMailBox setMailFrom getMailFrom getMailOption setMailOption getMailQueue setMailQueue getPopServer setPopServer getResult getServer setServer getShowDialog setShowDialog getTrap setTrap getVersion
function OnLog(logdata){ log1 = logdata; status = log1; } function OnProgress(data,total,current){ log1 = data + total + current; status = log1; }
<<Sample>>
<HTML><HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> <TITLE>BASP21 Pro Web Page</TITLE><BODY> <OBJECT ID="bobj" CLASSID="CLSID:EC0C18A0-4D5E-11D4-896C-00000E4E0AD6"> <PARAM NAME="Env" VALUE="ie4"> <EMBED NAME=bobj TYPE=application/x-basp21-plugin ENV=env1 JAVA=yes HIDDEN> </EMBED> </OBJECT> <script> var rc; function ondownload() { var dir = document.bobj.getHome() + "\\log.lzh"; document.bobj.setShowDialog(1); document.bobj.setFireEvent(1); status = document.bobj.DownLoad("http://basp21.com/b21soft/log.lzh",dir,""); } function onupload() { var dir = document.bobj.getHome() + "\\log.lzh"; document.bobj.setShowDialog(2); status = document.bobj.UpLoad("http://basp21.com/upload.php3",dir,""); } function onrcvmail() { var ar; document.bobj.setShowDialog(3); ar = document.bobj.RcvMail("","","saveall",""); status = ar[0]; } function OnLog(logdata){ status = logdata; } function OnProgress(data,total,current){ var log1 = data + total + current; status = log1; } </script> <FORM> <input type=button name=download value=DownLoad OnClick="ondownload()"> <input type=button name=upload value=UpLoad OnClick="onupload()"> <input type=button name=rcvmail value=RcvMail OnClick="onrcvmail()"> </FORM> </BODY></HTML>
c:\Program Files\Netscape\Communicator\Program\Plugins c:\Program Files\Netscape\Navigator\Program\Plugins c:\Program Files\Netscape\Netscape 6\Plugins
basp21p.dll bhelper.exe basp21p.iniこの場合、BASP21 Pro本体のレジストリ登録は、BASP21 Proプラグイン(npbasp21.dll) 起動時に自動的に行われます。regsvr32コマンドを実行する必要はありません。
Netscapeの\Program\Java\Bin\ ディレクトリの jit3240.dll ファイルを、 jit3240.bak などに名称を変更します。