[ホーム] [会社概要] [製品] [サポート]
[BASP21 Pro] [FAQ] [アプリケーションガイド] [ユーザガイド] [リファレンス] [サンプル]
[FTP オブジェクト] [ソケット オブジェクト]
English

BASP21 Pro ユーザガイド

BASP21 Proは、Microsoft プラットフォームで使える純国産のユニバーサルコンポーネントです。 IISアプリケーションのようなサーバサイドだけでなくクライアントのソフトウエアからも 使うことができます。この柔軟性によりBASP21 Pro の豊富な機能を簡単にツールに統合できます。
ここでは、次の環境でのBASP21 Proの使用方法を説明します。


■ ASP(Active Server Pages)

BASP21 Pro は、ASP環境でサーバコンポーネントとして動作します。 IIS3/IIS4/IIS5/IIS6に対応しています。

ここでは次のトピックを説明します。

■ インスタンス作成
BASP21 Pro オブジェクトは、サーバ スクリプトでServer.CreateObjectメソッドを使って インスタンスを作成します。
VBScript:
Set bobj = Server.CreateObject("basp21pro")
JScript:
var bobj = Server.CreateObject("basp21pro");
BASP21 Proインスタンスは、ASP Session オブジェクトおよび Application オブジェクトには 格納しないでください。
注意:BASP21 Proインスタンスは、同一スクリプトからは同時に2個以上作成できません。
'誤った使い方:
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
■ メソッド呼出し
BASP21 Proのメソッドは、次のように呼出します。
bobj.メソッド名 パラメータ
BASP21 Proメソッドの説明は、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
■ エラー処理
BASP21 Proオブジェクトは、メソッドエラー時の原因調査や適切なエラー処理を 強力にサポートする機能を持っています。 ログ取得機能を使うと呼出したメソッドのパラメータや実行結果、実行時間などが ログファイルにテキスト形式で記録されます。

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
■ メソッド実行制限
BASP21 Proオブジェクトは、Envプロパティで指定する環境ごとにメソッドやプロパティの 実行を制限することができます。 BASP21P.INIファイルのallowパラメータで許可する 名前を列挙し、denyパラメータで許可しない名前を 指定します。
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パラメータを同時に指定できません。
■ IIS認証
ASPファイル上のBASP21 Proオブジェクトは、IIS認証のセキュリティコンテキストで動作します。 匿名接続の場合は、"IUSR_マシン名"アカウントとなります。 ただし、Processメソッドで外部プロセスとして 実行するメソッドは、"IWAM_マシン名" または "SYSTEM" アカウントで実行されます。 どのセキュリティコンテキストで実行されたのかは、ログレコード のメッセージ種別 begin (メソッド開始)に記録されます。

BASP21 Proオブジェクトがファイルやディレクトリのアクセスに失敗するときは、 "IUSR_マシン名"アカウントがターゲットに適切なアクセス権を持っているかどうか確認してください。

■ メソッドのプロセス分離
ASPアプリケーションの中には、クライアントにすぐ応答を返す必要がない処理が 含まれることがあります。 他のコンピュータと通信を伴うメール送信などは、メソッドを別プロセスで実行すると クライアント応答性および他のASPアプリケーションに好ましい影響を与え、Webサーバの信頼性を 向上させることができます。

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 flushmail
Processメソッドは、指定したメソッドを別プロセスで実行します。 次の例は、送信メールキューが20通になったらFlushMailメソッドを別プロセスで実行します。
If 20 < bobj.FileCheck(bobj.MailQueue,1) Then
   rc = bobj.Process("-e test FlushMail")
End If 
サーバサイドで別プロセスで実行中のメソッドの進捗状況を確認したり処理をキャンセル する機能はオブジェクトモニターと呼ばれます。
■ オブジェクトモニター
通常、ASPサーバサイドスクリプトでは、コンポーネントはセキュリティで保護された デスクトップで実行されます。コンポーネントは、ダイアログやメッセージ送信で ユーザと対話することはできません。

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メソッドを使って、 他のスレッドで実行中のメソッドをキャンセルすることもできます。

■ ログ収集
BASP21 Proオブジェクトは、メソッドとプロパティの実行状況についてのログエントリを 記録できます。ログデータは、エラートラッキング、パフォーマンス測定、利用状況の評価に 利用します。また、ログデータにユーザデータも記録できますのでデバッグ時に便利です。 ここでは、BASP21 Proオブジェクトのログ機能について説明します。

ログファイル指定
ログファイル名は、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)  ' マーカーを持つログを出力
■ スクリプトのデバッグ
サーバサイドでは、簡単にデスクトップにアクセスできないため、ダイアログ表示など ユーザインタフェースを使ったASPスクリプトのデバッグができません。

PutLogメソッドを使うと任意のデータを ログエントリとしてログファイルに書き込むことができます。 ReadLogメソッドで書き込んだログエントリを 簡単に取得できます。

c=now()    ' 開始時刻
bobj.Env="iis5:" & c    ' 開始時刻をマーカーとしてログに書く
..............
bobj.Putlog datax  ' デバッグ情報
...............
Response.Write bobj.ReadLog(0,-50,c,50)  ' マーカーを持つログをページ出力

■ ASP.NET

BASP21 Pro は、ASP.NET環境でCOMコンポーネントとして使用することができます。

ここではIIS6とASP.NETでの使用方法について説明します。

■ アセンブリファイルのコピー
BASP21 Pro の.NETアセンブリファイル(BASP21PROLib.dll)をASP.NET アプリケーションの \Bin ディレクトリにコピーします。
また、以下のPAGEディレクティブを指定してください。
<%@ Assembly name="BASP21PROLib" %>
<%@ Import namespace="BASP21PROLib" %>
■ オブジェクトの作成
BASP21 Pro オブジェクトは、ASP.NETのWebページで以下のように作成します。
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 が使われます。

■ IIS6認証
IIS6上のASP.NETファイル上のBASP21 Proオブジェクトは、 匿名接続の場合、"SYSTEM SERVICE"アカウントで動作します。 Processメソッドで外部プロセスとして 実行するメソッドも、"SYSTEM SERVICE" アカウントで実行されます。 どのセキュリティコンテキストで実行されたのかは、ログレコード のメッセージ種別 begin (メソッド開始)に記録されます。

BASP21 Proオブジェクトがファイルやディレクトリのアクセスに失敗するときは、 "SYSTEM SERVICE"アカウントがターゲットに適切なアクセス権を持っているかどうか確認してください。


■ Visual Studio .Net 2003

BASP21 Pro は、Visual Studio .Net 2003環境でCOMコンポーネントとして使用することができます。

ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。

■ C# コンソールアプリケーション
[新規作成]-[プロジェクト]で、[Visual C#プロジェクト]-[コンソールアプリケーション]を 選択してプロジェクトを作成します。


次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。


using BASP21PROLib; という行をソースに追加します。

以下のようにbasp21pClassオブジェクトを作成して使用します。
basp21pClass basp = new basp21pClass();


■ Visual Basic ASP.NET Webアプリケーション
[新規作成]-[プロジェクト]で、[Visual Basicプロジェクト]-[ASP.NET Webアプリケーション]を 選択してプロジェクトを作成します。


次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。


Imports BASP21PROLib という行をソースに追加します。


以下のようにbasp21pClassオブジェクトを作成して使用します。
Dim bobj As basp21p
bobj = New basp21p



■ Visual Studio 2008

BASP21 Pro は、Visual Studio 2008環境でCOMコンポーネントとして使用することができます。

ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。

■ C# コンソールアプリケーション
[新規作成]-[プロジェクト]で、[Visual C#プロジェクト]-[コンソールアプリケーション]を 選択してプロジェクトを作成します。



次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。



using BASP21PROLib; という行をソースに追加します。



以下のようにbasp21pClassオブジェクトを作成して使用します。
basp21pClass basp = new basp21pClass();
以下のようにメソッドを呼び出します。



■ Visual Basic ASP.NET Webアプリケーション
[新規作成]-[プロジェクト]で、[Visual Basic]-[ASP.NET Webフォームアプリケーション]を 選択してプロジェクトを作成します。



次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。



Imports BASP21PROLib という行をソースに追加します。



以下のようにbasp21pオブジェクトを作成して使用します。
Dim bobj As basp21p = New basp21p
ver.Text = bobj.Version



■ Visual Studio 2010

BASP21 Pro は、Visual Studio 2010環境でCOMコンポーネントとして使用することができます。

ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。

■ C# コンソールアプリケーション
[新規作成]-[プロジェクト]で、[Visual C#プロジェクト]-[コンソールアプリケーション]を 選択してプロジェクトを作成します。



次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。



using BASP21PROLib; という行をソースに追加します。



以下のようにbasp21pClassオブジェクトを作成して使用します。
basp21pClass basp = new basp21pClass();
以下のようなエラーが表示されることがあります。
相互運用型'BASP21PROLib.basp21pClass'を埋め込むことができません。
代わりに適用可能なインタフェースを使用してください。




この場合は、[参照設定]-[BASP21PROLib]のプロパティを選択。 [相互運用機能型の埋め込み]をFalseに設定します。



以下のようにメソッドを呼び出します。



■ Visual Basic ASP.NET Webアプリケーション
[新規作成]-[プロジェクト]で、[Visual Basic]-[ASP.NET Webフォームアプリケーション]を 選択してプロジェクトを作成します。



次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。



Imports BASP21PROLib という行をソースに追加します。



以下のようにbasp21pオブジェクトを作成して使用します。
Dim bobj As basp21p = New basp21p
ver.Text = bobj.Version



■ Visual Studio 2012

BASP21 Pro は、Visual Studio 2012環境でCOMコンポーネントとして使用することができます。

ここではC#プロジェクトとVisual Basicプロジェクトでの使用方法について説明します。

■ C# コンソールアプリケーション
[新規作成]-[プロジェクト]で、[Visual C#プロジェクト]-[コンソールアプリケーション]を 選択してプロジェクトを作成します。



次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。



using BASP21PROLib; という行をソースに追加します。



以下のようにbasp21pClassオブジェクトを作成して使用します。
basp21pClass basp = new basp21pClass();
以下のようなエラーが表示されることがあります。
相互運用型'BASP21PROLib.basp21pClass'を埋め込むことができません。
代わりに適用可能なインタフェースを使用してください。




この場合は、[参照設定]-[BASP21PROLib]のプロパティを選択。 [相互運用機能型の埋め込み]をFalseに設定します。



以下のようにメソッドを呼び出します。



■ Visual Basic ASP.NET Webアプリケーション
[新規作成]-[プロジェクト]で、[Visual Basic]-[ASP.NET Webフォームアプリケーション]を 選択してプロジェクトを作成します。



次に[プロジェクト]-[参照の追加]-[COM]で BASP21 Pro を選択して参照を追加します。



Imports BASP21PROLib という行をソースに追加します。



以下のようにbasp21pオブジェクトを作成して使用します。
Dim bobj As basp21p = New basp21p
ver.Text = bobj.Version



■ クラシックASPのデバッグ方法(Visual Studio 2012/2013 + IIS Express)

Windows 7 + Visual Studio 2012環境でクラシックASPのデバッグ方法について説明します。
Windows 8.1 + Visual Studio 2013環境でも同様の設定で動作します。
Visual Studio 2012 で標準でインストールされるIIS 8.0 Express を使用します。
Visual Studio開発サーバーではなく、IIS Expressを使う設定になっています
Visual Studio 2013では、IIS Expressのみとなります。

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.configとWeb.Debug.config は、不要なので削除します。
サイトにASPファイル(test.asp)を追加します。 test.aspファイルを右クリックして [スタートページに設定]を選択します。




ソリューションエクスプローラーで 以下のようにWebサイト名にフォルダ名が表示された場合、
[Visual Studio開発サーバーを使用する]ように設定されています。
そのため、デバッグサーバーを IIS Expressに変更する必要があります。
サイトを右クリックして[IIS Expressを使用する]をクリックします。




Ctrl+F5、もしくはメニューから[デバッグなしで実行]で開始します。 Visual Studio が規定のブラウザを起動します。

メニューから[デバッグ]-[プロセスにアタッチ]を選択してダイアログを表示します。

[アタッチ先]を[スクリプトコード]、[選択可能なプロセス]にiisexpress.exe を選択して [アタッチ]ボタンを押します。
iisexpress.exeの[型]が x86 ですので、BASP21 Proオブジェクトはx86版をインストールしておく必要があります。




[スクリプト ドキュメント]のtest.asp ファイル[動的]を開いてブレークポイントを設定します。
アタッチ前のtest.aspファイルにブレークポイントを設定しても無効ですので注意。
ブレークポイントの設定後、 ブラウザの再読込みを実行してデバッグを開始します。




■ リモートPCからデバッグ(Visual Studio 2012/2013 + IIS Express)

IIS Expressは、初期設定ではURLがlocalhostになっているので、 他のPCからアクセスすることができません。

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として説明しています。
ホストに接続できない場合は、 Windows ファイアウォールを無効にする必要があります。

IIS Express をコマンドラインから起動できます。
コマンド プロンプトを「管理者として実行」または、netsh http add urlaclしないとリモートからはアクセスできません。

(64ビットモード...64ビット版BASP21 Pro を実行可能。)
"C:\Program Files\IIS Express\iisexpress" /site:ASP2


(32ビットモード)
"C:\Program Files (x86)\IIS Express\iisexpress" /site:ASP2

■ IIS Express 64ビットのデバッグ方法(Visual Studio 2012/2013)
Visual Studio 2012/2013 では、既定で32ビット版IIS Express を起動します。 そのため、64ビット版BASP21 Proが使えません。
64ビット版IIS Expressを起動するには、レジストリを変更する必要があります。





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起動は 正式サポートではないようです。
レジストリ変更後に、 アタッチ画面で 型が x64 と表示されたら成功です。




■ Visual Studio 2015

BASP21 Pro は、Visual Studio 2015環境でCOMコンポーネントとして使用することができます。

ここではC#プロジェクトでの使用方法について説明します。

■ C# コンソールアプリケーション
[新規作成]-[プロジェクト]で、[Visual C#プロジェクト]-[コンソールアプリケーション]を 選択してプロジェクトを作成します。



次にソリューションエクスプローラーで[参照の追加]を選択します。



参照マネージャーで[COM]の BASP21 Pro を選択して参照を追加します。
注意:リストに表示されないときは、32bit版の BASP21 Pro のインストールが必要です。



using BASP21PROLib; という行をソースに追加します。
以下のようにbasp21pClassオブジェクトを作成して使用します。
basp21p bobj = new basp21p();





■ IE(Internet Explorer)

BASP21 Pro は、Microsoft Internet Explorer 3.02 以上で動作します。
BASP21 Pro ActiveX コントロールは、<OBJECT> タグを使って Web ページに埋め込まれます。

BASP21 Proのメソッドおよびプロパティは、IEがサポートするスクリプトから使うことができます。 スクリプトの記述には、さまざまなスクリプト言語を使用できますが、 Microsoft Visual Basic Scripting Edition (VBScript) と Microsoft の ECMAScript 言語である JScript の 2 つが最も一般的なスクリプト言語です。 1 つの Web ページに含まれる各スクリプトに対して、異なる記述言語を使用することも可能です。 ブラウザの種類を検出するスクリプトの記述に JScript が使われるようです。

ここでは次のトピックを説明します。

■ OBJECTタグ
IE上のクライアントスクリプトでBASP21 Pro オブジェクトを使うには、 OBJECTタグを使って、BASP21 Pro ActiceXコントロールを貼り付けます。 OBJECTタグを使わずにCreateObject/ActiveXObjectメソッドでBASP21 Proの インスタンスを作成できますが、BASP21 Proを自動インストールするには OBJECTタグを使う必要があります。
【HTMLソース】
<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プロパティのみが指定できます。

■ VBScript編
VBScript は VBA のサブセットです。VBScript は大文字と小文字を区別しません。

【イベントプロシージャ】
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編
JScript は大文字と小文字を区別します。 リテラルの中で"\" 文字を使う場合は、C言語のように "\\" と2つ指定します。

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>

■ 進捗ダイアログ表示

次のメソッド実行中は、進捗ダイアログを表示することができます。 Bsendm/Diff/DownLoad/FlushMail/RcvMail/SecureFile/SortFile/UpLoad

進捗ダイアログを表示するには、 ShowDialogプロパティを使います。 ダイアログ表示位置も選択可能です。

  bobj.ShowDialog = 3; // 中央に表示
  bobj.DownLoad("http://basp21.com/b21soft/log.lzh",bobj.home + "\\log.lzh");

■ イベント

イベントには以下の2つがあります。
イベントは、FireEventプロパティで発生を 制御することができます。
  bobj.FireEvent = 1;
  bobj.DownLoad("http://basp21.com/b21soft/log.lzh",bobj.home + "\\log.lzh");

■ BASP21P.INIファイル自動ダウンロード

BASP21P.INIファイルをサーバから自動ダウンロードすることができます。 EnvプロパティでEnv名のあとに"#" で区切って バージョン番号を指定すると inifileversionパラメータの番号と比較して Envプロパティでのバージョン番号が大きい場合に、inifileurlパラメータ のURLからBASP21P.INIファイルがパソコンにダウンロードされます。
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]

■ IEによる自動インストール

BASP21 ProコンポーネントをIEのActiveXコントロールのダウンロード機能を使って パソコンへ自動インストールするには次の手順で行います。
  1. BASP21P.CABファイル作成
  2. OBJECTタグを含むインストール用htmlファイル作成
  3. WWWサーバにインストール用htmlファイル/BASP21P.CABファイルを配置
  4. インストール用htmlファイルをインストールしたいパソコンでIEでアクセス

パソコンへ自動インストールするには、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 ファイル作成方法

ここでは、インターネットを介して BASP21 Pro ActiveXコントロールを頒布するための BASP21P.CAB ファイルの作成方法について説明します。 BASP21P.CAB ファイルは、Microsoftが提供しているキャビネット開発キットに含まれる CABARC.EXEで簡単に作成することができます。

BASP21P.CABファイルを作成するには次の手順で行います。

  1. キャビネット開発キットのダウンロード
  2. BASP21P.INFファイル作成
  3. BASP21P.INIファイル作成
  4. CABARC.EXEでBASP21P.CABファイル作成

1.キャビネット開発キットのダウンロード
キャビネット開発キット (CABinet Development Kit) は、Microsoft の開発者向け Web サイト http://msdn.microsoft.com/workshop/management/cab/cabdl.asp で入手できます。ダウンロードファイル名は、cab-sdk.exe(548KB)です。

このファイルは、自己解凍形式ですのでダブルクリックして解凍します。 解凍したディレクトリのbinサブディレクトリのCABARC.EXEを適当なディレクトリ(例:c:\basp21cab)にコピーします。 BASP21P.CABファイル作成に必要なファイルは、キャビネット開発キットのうちでCABARC.EXEのみです。

2. BASP21P.INF ファイル作成
BASP21P.INF ファイルは、BASP21 Proコンポーネント一式をインストールまたはダウンロードする 必要のあるファイル (DLL やその他の ファイルなど) を指定するテキスト ファイルです。 INF ファイルを使用すると、必要なすべてのファイルをまとめて 1 つの CAB ファイルに圧縮できます。 BASP21P.INF ファイルは、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 file
FileVersionを現在のBASP21P.DLLのファイルバージョンに変更します。 BASP21P.DLLファイルのバージョン番号を取得するには、エクスプローラでファイルを右クリックします。 表示されたメニューの [プロパティ] をクリックし、ダイアログ ボックスの [バージョン情報] タブをクリックします。

"DestDir" は、ファイルのロード先ディレクトリです。"11" はシステム ディレクトリ WINDOWS\SYSTEM または WINNT\SYSTEM32 を示します。 BASP21P Pro は、システムディレクトリに配置する必要があります。

"clsid" は、BASP21 Pro ActiveXコントロールの CLSID です。

3. BASP21P.INI ファイル作成
BASP21P.INIファイルは、BASP21 Proの環境設定ファイルです。 BASP21P.INIファイルは、BASP21 Proの機能により最新バージョンを自動ダウンロードできますので、 CABファイルに含めるBASP21P.INIファイルは最低限のパラメータのみを指定します。

以下の BASP21P.INI ファイルをCABARC.EXEをコピーしたディレクトリ (例:c:\basp21cab)にコピーします。

[global]
license=your-license
inifileversion=1
inifileurl=http://basp21.com/data/basp21p.ini
allow=env
4. CABARC.EXEでBASP21P.CABファイル作成
最後のステップでCABARC.EXE ユーティリティを実行して、BASP21P.CAB ファイルを作成します。 CABARC.EXE は、すべての関連ファイルが入っているディレクトリで実行する必要があります。 コマンド ラインで、BASP21P.INFファイルでの指定順にソース ファイルを指定し、 最後に BASP21P.INF ファイルを指定します。

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 オプションは、キャビネット内にコード署名用のスペースを確保します。


■ WSH(Windows Scripting Host)

WSH環境では、VBScript または JScript からBASP21 Pro オブジェクトが使えます。

【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);
}

■ Visual Basic Application (VBA)

Visual Basic Application(VBA)環境では、事前バインディングまたは実行時バインディングの いずれかでBASP21 Proを使用できます。
Excel 2000 でのVBAを例に説明します。 まず、事前バインディングを使用するには、[ツール]-[マクロ]-[Visual Basic Editor] で Visual Basic Editor プロジェクトを開きます。 [ツール]-[参照設定] ダイアログ ボックスの [参照可能なライブラリ ファイル] ボックスで [BASP21 Pro ActiveX Control] をチェックします。 BASP21 Proオブジェクトを参照するオブジェクト変数を宣言および初期化します。
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

■ Visual Basic 5.0/6.0

Visual Basic 5.0/6.0環境では、事前バインディングまたは実行時バインディングの いずれかでBASP21 Proを使用できます。
事前バインディングを使用するには、[プロジェクト]-[参照設定] ダイアログ ボックスの [参照可能なライブラリ ファイル] ボックスで[BASP21 Pro ActiveX Control] をチェックします。 BASP21 Proオブジェクトを参照するオブジェクト変数を宣言および初期化します。
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

■ Visual C++ 5.0/6.0

Visual C++ 5.0/6.0環境では、スマートポインタを使って BASP21 Proオブジェクトに アクセスする方法を説明します。 スマートポインタを使うにはタイプライブラリ(basp21pro.tlb)を #import ディレクティブで指定します。 タイプ ライブラリの内容は COMインタフェースのC++ クラスに変換されます。
注意:BASP21 Proインスタンスは、同一スレッドからは同時に2個以上作成できません。
#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;
}

■ コマンドラインツール(BHELPER.EXE)

BASP21 Proオブジェクトをコマンドラインから実行するには、 BHELPER.EXEを使います。 BHELPER.EXEは、BASP21 Proオブジェクトをラップした アプリケーションです。
注意:64ビット版BASP21 Proオブジェクトを使用する場合は、 64ビット版のBHELPER.EXEを使用します。
64ビット版のBHELPER.EXEは、x64サブフォルダに存在します。

Processメソッドは、BHELPER.EXE を利用しています。

BHELPER.EXE は、次のような目的で使います。

注意:すべてのメソッドがBHELPER.EXEで利用可能というわけではありません。
以下のメソッドのみがBHELPER.EXE で使えます。
Base64メソッド Bsendmメソッド Cancelメソッド Diffメソッド DownLoadメソッド FileCheckメソッド FlushMailメソッド Kconvメソッド KconvFileメソッド MD5メソッド Monitorメソッド RcvMailメソッド ReadDirメソッド ReadLogメソッド ReadMailメソッド SecureFileメソッド SendMailメソッド SortFileメソッド SortMailメソッド UpLoadメソッド

■ 64ビットアプリケーションでの使用方法

BASP21 Proオブジェクト(64ビット版DLL)を64ビットアプリケーションで使用する方法を説明します。

■ 64ビットWindows(WOW64)上での使用方法

BASP21 Proオブジェクト(32ビット版DLL)を64ビットWindows(WOW64環境)上で使用する方法を説明します。
32ビットのIISワーカープロセスの場合には 32ビット版のBASP21 Proを使用する必要があります。

[ホーム] [会社概要] [製品] [サポート]
[BASP21 Pro] [FAQ] [アプリケーションガイド] [ユーザガイド] [リファレンス] [サンプル]
[FTP オブジェクト] [ソケット オブジェクト]

Copyright © 2001-2017 B21Soft, Inc. All Rights Reserved.