ここでは次のトピックを説明します。
VBScript: Set bobj = Server.CreateObject("basp21pro") JScript: var bobj = Server.CreateObject("basp21pro");BASP21 Proインスタンスは、ASP Session オブジェクトおよび Application オブジェクトには 格納しないでください。
'誤った使い方: Set bobj1 = Server.CreateObject("basp21pro") Set bobj2 = Server.CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Nothing '正しい使い方: Set bobj1 = Server.CreateObject("basp21pro") Set bobj1 = Nothing Set bobj2 = Server.CreateObject("basp21pro") Set bobj2 = Nothing
bobj.メソッド名 パラメータBASP21 Proメソッドの説明は、BASP21 Proリファレンスを参照してください。 パラメータは、メソッドにより異なります。
bobj.プロパティ名 = パラメータBASP21 Proプロパティの説明は、BASP21 Proリファレンスを参照してください。
Envプロパティは、BASP21 Proオブジェクトの動作環境を設定します。 環境によって異なるパラメータをEnvプロパティで設定することで、スクリプトがシンプルになります。 Envプロパティは、次のように使います。
bobj.Env = "env名" bobj.Env = "*"env名は、BASP21P.INIファイルのセクション名です。 "*" を指定するとカレントなセキュリティコンテキスト(ユーザアカウント)名になります。 IIS匿名接続の場合は、"IUSR_マシン名"となります。
以下は、SendMailメソッドとSendMailメソッドの既定値を設定するBASP21P.INIファイル例です。
bobj.Env = "iis5" mailto = "hoge@basp21.com" subj = "書類" body = "こんにちは。" & vbCrLf & "書類です" files = bobj.Home & "\good.doc" bobj.SendMail mailto,subj,body,files basp21p.iniファイル [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.com上記のSendMailメソッドで使われるSMTPサーバは、smtp-server が選択されます。 送信元メールアドレスは、your@basp21.com が使われます。
また、以下のようにスクリプト内でダイナミックにSMTPサーバ名と送信元メール アドレスを指定することもできます。
bobj.Server = "smtp-server2" bobj.MailFrom = "her@basp21.com" bobj.SendMail mailto,subj,body,files
homeパラメータは、ホームディレクトリ名を 指定すると便利です。homeパラメータで指定したディレクトリ名は、 他のディレクトリ名を指定するパラメータでピリオドで参照可能です。 homeパラメータ、mailboxパラメータ、mailqueueパラメータ、monitorパラメータで 指定されたディレクトリが存在しない場合は、Envプロパティ設定実行時に 作成されます。
[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= [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 の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) ' マーカーを持つログをページ出力
ここではIIS6とASP.NETでの使用方法について説明します。
<%@ Assembly name="BASP21PROLib" %> <%@ Import namespace="BASP21PROLib" %>
C#: basp21p bobj = new basp21p(); VB.NET: Dim bobj As basp21p bobj = new basp21p() JScript.NET: var bobj = new basp21p();IIS6でBASP21 Pro オブジェクト作成時に以下のエラーメッセージで失敗する場合があります。
System.UnauthorizedAccessException: アクセスが拒否されました。この場合は、basp21p.dll ファイルが含まれるフォルダを右クリックして [セキュリティ]プロパティページで、"NETWORK SERVICE"ユーザにアクセス権を付与してください。
Envプロパティは、BASP21 Proオブジェクトの動作環境を設定します。 環境によって異なるパラメータをEnvプロパティで設定することで、スクリプトがシンプルになります。 Envプロパティは、次のように使います。
bobj.Env = "env名" bobj.Env = "*"env名は、BASP21P.INIファイルのセクション名です。 "*" を指定するとカレントなセキュリティコンテキスト(ユーザアカウント)名になります。 IIS6匿名接続の場合は、"NETWORK SERVICE"となります。
以下は、SendMailメソッドとSendMailメソッドの既定値を設定するBASP21P.INIファイル例です。
' VB.NET Dim bobj As basp21p Dim mailto As String,subj As String,body As String,files As String Dim rc As long bobj = new basp21p() bobj.Env = "iis6" mailto = "hoge@basp21.com" subj = "書類" body = "こんにちは。" & vbCrLf & "書類です" files = bobj.Home & "\good.doc" rc = bobj.SendMail(mailto,subj,body,files) basp21p.iniファイル [global] allow=env license= [iis6] allow=sendmail server=smtp-server mailfrom=your@basp21.com home=c:\test\iis5 [NETWORK SERVICE] allow=sendmail server=smtp-server mailfrom=your@basp21.com上記のSendMailメソッドで使われるSMTPサーバは、smtp-server が選択されます。 送信元メールアドレスは、your@basp21.com が使われます。
BASP21 Proオブジェクトがファイルやディレクトリのアクセスに失敗するときは、 "SYSTEM SERVICE"アカウントがターゲットに適切なアクセス権を持っているかどうか確認してください。
ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。
basp21pClass basp = new basp21pClass();
Dim bobj As basp21p bobj = New basp21p
ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。
basp21pClass basp = new basp21pClass();以下のようにメソッドを呼び出します。
Dim bobj As basp21p = New basp21p ver.Text = bobj.Version
ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。
basp21pClass basp = new basp21pClass();以下のようなエラーが表示されることがあります。
相互運用型'BASP21PROLib.basp21pClass'を埋め込むことができません。 代わりに適用可能なインタフェースを使用してください。
Dim bobj As basp21p = New basp21p ver.Text = bobj.Version
ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。
basp21pClass basp = new basp21pClass();以下のようなエラーが表示されることがあります。
相互運用型'BASP21PROLib.basp21pClass'を埋め込むことができません。 代わりに適用可能なインタフェースを使用してください。
Dim bobj As basp21p = New basp21p ver.Text = bobj.Version
IIS Express プロセスにアタッチするため Visual Studio 2012/2013 は、Exspress版ではなく、Professional版を使用する必要があります。
IIS Express で、「サーバーサイドスクリプトデバッグ」を有効にします。
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config
ファイルを編集します。
appAllowDebugging="true"を追加します。
アップロードの上限を変更する場合は、maxRequestEntityAllowed="2048000"を追加します。
(200行目くらい) <system.webServer> <serverRuntime /> <asp scriptErrorSentToBrowser="true" appAllowDebugging="true"> <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" /> <limits maxRequestEntityAllowed="2048000" /> </asp>Visual Studio 2012/2013でWebサイトを作成します。 [新規作成]-[Webサイト]で、[テンプレート]-[Visual Basic]-[ASP.NET空のWebサイト]を選択。
ソリューションエクスプローラーで
以下のようにWebサイト名にフォルダ名が表示された場合、
[Visual Studio開発サーバーを使用する]ように設定されています。
そのため、デバッグサーバーを IIS Expressに変更する必要があります。
サイトを右クリックして[IIS Expressを使用する]をクリックします。
Ctrl+F5、もしくはメニューから[デバッグなしで実行]で開始します。 Visual Studio が規定のブラウザを起動します。
メニューから[デバッグ]-[プロセスにアタッチ]を選択してダイアログを表示します。
[アタッチ先]を[スクリプトコード]、[選択可能なプロセス]にiisexpress.exe を選択して
[アタッチ]ボタンを押します。
iisexpress.exeの[型]が x86 ですので、BASP21 Proオブジェクトはx86版をインストールしておく必要があります。
[スクリプト ドキュメント]のtest.asp ファイル[動的]を開いてブレークポイントを設定します。
アタッチ前のtest.aspファイルにブレークポイントを設定しても無効ですので注意。
ブレークポイントの設定後、
ブラウザの再読込みを実行してデバッグを開始します。
Visual Studio 2012/2013 を実行しているPCで、IIS Expressの設定をします。
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config
ファイルを編集します。
<binding protocol="http" bindingInformation="*:49407:xx.xx.xx.xx" />を追加します。
IPアドレスは、Visual Studioを実行しているPCのIPアドレスを指定します。
設定後に、Visual Studio 2012/2013は、再起動する必要があります。
(サイト名 で検索) <site name="ASP2" id="6"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\WebSites\ASP2" /> </application> <bindings> <binding protocol="http" bindingInformation="*:49407:localhost" /> <binding protocol="http" bindingInformation="*:49407:xx.xx.xx.xx" /> </bindings> </site>Visual Studio 2012/2013を管理者権限で実行していない場合は、 コマンド プロンプトを「管理者として実行」して、以下のコマンドを実行します。
netsh http add urlacl url=http://xx.xx.xx.xx:49407/ user=everyoneポート番号は、ここでは49407として説明しています。
(64ビットモード...64ビット版BASP21 Pro を実行可能。) "C:\Program Files\IIS Express\iisexpress" /site:ASP2 (32ビットモード) "C:\Program Files (x86)\IIS Express\iisexpress" /site:ASP2
Visual Studio 2012 ------------------ [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\WebProjects] "Use64BitIISExpress"=dword:00000001 Visual Studio 2013 ------------------ [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\WebProjects] "Use64BitIISExpress"=dword:00000001注意点として、Visual Studio からの64ビット版IIS Express起動は 正式サポートではないようです。
ここではC#プロジェクトでの使用方法について説明します。
basp21p bobj = new basp21p();
BASP21 Proのメソッドおよびプロパティは、IEがサポートするスクリプトから使うことができます。 スクリプトの記述には、さまざまなスクリプト言語を使用できますが、 Microsoft Visual Basic Scripting Edition (VBScript) と Microsoft の ECMAScript 言語である JScript の 2 つが最も一般的なスクリプト言語です。 1 つの Web ページに含まれる各スクリプトに対して、異なる記述言語を使用することも可能です。 ブラウザの種類を検出するスクリプトの記述に 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 は、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ディレクトリ
注意: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 n 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メソッドを使います。 RcvMail/ReadMailメソッドの戻り値は、配列となります。 VBArrayのtoArrayメソッドでJscript標準の配列に変換する必要があります。 var rc = bobj.RcvMail(.......); var rc2 = (new VBArray(rc)).toArray(); var rc3 = rc2[0]; VBArrayオブジェクト(JavaScript) toArray メソッド (VBArray) (JavaScript) 使用例 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; }使用例5 OnProgressイベントを受信する方法。
// Visual C++ イベントを受信するサンプル // #include "stdafx.h" #include <atlbase.h> CComModule _Module; #include <atlcom.h> #import "basp21pro.tlb" no_namespace // イベントシンクID #define SINKID 0 // イベント DISPID #define DISPID_ONPROGRESS 1 // イベントシンクオブジェクト class BASP21SinkObj : public IDispEventImpl<SINKID,BASP21SinkObj> { public: BEGIN_SINK_MAP(BASP21SinkObj) SINK_ENTRY(SINKID,DISPID_ONPROGRESS,OnProgress) END_SINK_MAP() // イベントルーチン HRESULT _stdcall OnProgress(BSTR msg, long total, long current) { _bstr_t data = msg; printf ("OnProgress !!%s %d %d\n",(const char*)data,total,current); return S_OK; } }; void com_assert(HRESULT result, char *msg) { if ( FAILED(result) ) { printf("error %d %s",result,msg); exit(1); } } int main(int argc, char* argv[]) { if (argc < 3) { printf("invalid arg"); return -1; } _bstr_t url = argv[1]; // 最初のパラメータは URL _bstr_t filepath = argv[2]; // 次はパス名 HRESULT hr = ::CoInitialize(NULL); // COM初期化処理 com_assert(hr,"com init failed"); _Module.Init(NULL, ::GetModuleHandle(NULL)); Ibasp21pPtr pbobj(__uuidof(basp21p)); // BASP21 オブジェクト取得 if (pbobj == NULL) { printf("basp21 create failed"); return -1; } // シンクオブジェクト作成&接続 BASP21SinkObj *pBASP21SinkObj = new BASP21SinkObj; hr = AtlGetObjectSourceInterface(pbobj, &pBASP21SinkObj->m_libid, &pBASP21SinkObj->m_iid, &pBASP21SinkObj->m_wMajorVerNum, &pBASP21SinkObj->m_wMinorVerNum); com_assert(hr,"AtlGetObjectSourceInterface"); hr = pBASP21SinkObj->DispEventAdvise(pbobj, &pBASP21SinkObj->m_iid); com_assert(hr,"DispEventAdvise failed"); pbobj->PutEnv("env1"); pbobj->PutFireEvent(1); // FireEventプロパティ=1 _bstr_t opt = ""; pbobj->DownLoad(url,filepath,opt); // DownLoadメソッド呼び出し // シンクオブジェクト切断&消去 if (pBASP21SinkObj->m_dwEventCookie != 0xFEFEFEFE) pBASP21SinkObj->DispEventUnadvise(pbobj, &pBASP21SinkObj->m_iid); delete pBASP21SinkObj; pbobj = NULL; _Module.Term(); // COM終了処理 ::CoUninitialize(); return 0; }
Processメソッドは、BHELPER.EXE を利用しています。
BHELPER.EXE は、次のような目的で使います。
regsvr32.exe で登録します。x64 サブフォルダにあるファイルが 64ビット版のDLLです。 regsvr32.exe c:\b21\x64\basp21p.dll regsvr32.exe c:\b21\x64\bftp.dll regsvr32.exe c:\b21\x64\bsocket.dll 注意:32ビット版のBASP21 Proオブジェクトは、インストールする必要はありません。
64ビット版のスクリプトエンジンを使用します。 wscript.exe test.vbs cscript.exe test.vbs
動作プラットホームを"x64"に設定する必要があります。 BASP21 Proを参照する Visual Basic プロジェクト または C# プロジェクトのプラットフォーム ターゲットCPU プロパティに "x64" を設定してビルドします。
64ビット版のIE上では、64ビット版ActiveXのみ動作します。
デフォルトでは IIS6ワーカープロセスが 64ビットのため BASP21 Proオブジェクト(64ビット版DLL)がそのまま動作します。
regsvr32.exe を使用して、32ビット版DLLを登録します。 regsvr32.exe c:\b21\basp21p.dll regsvr32.exe c:\b21\bftp.dll regsvr32.exe c:\b21\bsocket.dll 注意:64ビット版のBASP21 Proオブジェクトは、インストールする必要はありません。
32ビット版のスクリプトエンジンを使用します。 %Systemroot%\SysWOW64\wscript.exe test.vbs %Systemroot%\SysWOW64\cscript.exe test.vbs
動作プラットホームを"x86"に設定する必要があります。 BASP21 Proを参照する Visual Basic プロジェクト または C# プロジェクトのプラットフォーム ターゲットCPU プロパティに "x86" を設定してビルドします。
32ビット版のIE上では、32ビット版ActiveXのみ動作します。
II7ではアプリケーションプール単位に32/64ビット切替が可能です。 32ビットモードで使用するアプリケーションプールを作成します。 アプリケーションプールの[32 ビットアプリケーションの有効化]フラグを True に変更します。
II7.5ではアプリケーションプール単位に32/64ビット切替が可能です。 32ビットモードで使用するアプリケーションプールを作成します。 アプリケーションプールの[32 ビットアプリケーションの有効化]フラグを True に変更します。