NDAAlohaPC1.AlohaPC1CommX クラス


[スレッディングモデル] Apartment


■ プロパティ一覧
プロパティ名 内容
Active 通信ポートのオープン/クローズ
PortName 使用する RS-232C の COM ポート名
LastError プロパティ設定時、メソッド呼び出し時のエラー状態を表す値

■ メソッド一覧
メソッド名 内容
FindPort アロハPC1に接続している通信ポートの検索
Open 通信ポートのオープン
Close 通信ポートのクローズ
ReadMemory アロハPC1のメモリ読み出し
ReadMemory2 アロハPC1のメモリ読み出し
WriteMemory アロハPC1のメモリ書き込み

■ イベント一覧
イベント名 内容
OnPhoneDetect 電話着信時
OnCommError

電話着信時のRS-232Cの通信回線エラー

OnError 電話着信時のアロハPC1との通信エラー




■ オブジェクトの作成方法

VB の場合)

Set aloha = New NDAAlohaPC1.AlohaPC1CommX

VBScript の場合)

Set aloha = Server.CreateObject("NDAAlohaPC1.AlohaPC1CommX")

Delphi の場合

varAloha: Variant;
Aloha := CreateOleObject('NDAAlohaPC1.AlohaPC1CommX');
または
varAloha: IAlohaPC1CommX;
Aloha := CreateOleObject('NDAAlohaPC1.AlohaPC1CommX') as IAlohaPC1CommX;

※ ラッパコンポーネントを作ればコンポーネントをフォームに貼り付けるだけで使えます。


■ プロパティ

Active [アクセス] Read and Write
[データ型] IDL: VARIANT_BOOL VB: Boolean Delphi: WordBool
[初期値] False

[解説]
通信ポートのオープン/クローズを設定します。
True に設定するとオープン(Open メソッド呼び出し)、False に設定するとクローズ(Close メソッド呼び出し)します。
オープンするCOMポートは PortName プロパティで設定されたものになります。
エラーがあると LastError プロパティにエラーコードが設定されます。
オープンするまで通信できません。
PortName [アクセス] Read and Write
[データ型] IDL: BSTR* VB: String Delphi: WideString
[初期値] "COM1"

[解説]
オープンするCOMポート名 を設定します。
COMポート名は通常、"COM1", "COM2" などの文字列で指定します。
通信ポートオープンしている状態では設定変更できないのでエラーになります。エラーがあったかどうかは LastError プロパティを参照して下さい。
FindPort メソッドを使えば、アロハPC1と接続されているCOMポート名を自動設定することもできます。
LastError [アクセス] Read Only
[データ型] IDL: long VB: Long Delphi: Integer

[解説]
直前に実行したメソッド、またはプロパティの設定でのエラー状態を表すエラーコードが格納されています。

エラーコード表)
エラーコード値 エラー内容
0 エラーはありません。直前に実行したメソッド、プロパティの設定は正常に行われています。
1 通信ポートをオープンできません。
2 通信ポートをオープンしているため要求は受け付けられません。
3 通信ポートがオープンされていません。
4 CTS(CS)がOFFのためR/Wできません。
5 メモリ読み出しエラー
ReadMemory, ReadMemory2 メソッド実行エラー)
6 メモリ書き込みエラー
WriteMemory メソッド実行エラー)
7 FindPort メソッドにて接続ポートが見つかりませんでした。
-1 内部エラー
-2 試用期限が過ぎています。(トライアル版のみ)
Open メソッド実行時、または Active=True 時のエラー)


■ メソッド

FindPort


IDL HRESULT _stdcall FindPort([out, retval] VARIANT_BOOL * Result );
VB Function FindPort() As Boolean
Delphi function FindPort: WordBool; safecall;

[解説]
アロハPC1に接続している通信ポートを自動検索します。
見つかった場合は True を返し、PortName プロパティに見つかったCOMポート名が設定されます。
見つからなかった場合は、または通信ポートオープン時は False を返し、LastError プロパティにエラーコードが設定されます。

[備考]
アロハPC1に接続しているかどうかは以下のように処理して調べています。

(1) COMポートをオープンする
(2) アロハPC1のメモリ読み出しコマンドを送り、COMポートに接続されておいる接続機器の反応を調べる
(3) COMポートをクローズする

この (1) から (3) をPC上の全COMポートを対象に総当りしています。
PC上のCOMポートは以下のレジストリキーを参照しています。
HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm

アロハPC1に接続しているにも関わらず「見つからない」となる場合もあります。これは、アロハPC1からのCTS(CS)信号がOFFになっていると通信できないため、その結果「見つからない」と判断しているからです。
このCTS=OFFの状態とは、
・RS-232Cに接続されていない状態 (あるいは接続されていても、アロハPC1の電源がOFFの状態)
・アロハPC1の操作パネルの [△] [▽] ボタンを押して着信履歴などが表示されている間
・電話着信の瞬間
などです。
特にリトライ処理はしていないので、アプリケーション側で対応することになります。
Open
IDL HRESULT _stdcall Open([out, retval] VARIANT_BOOL * Result );
VB Function Open() As Boolean
Delphi function Open: WordBool; safecall;

[解説]
通信ポートをオープンします。これは Active=True と同じです。
正常にオープンできた場合、または既にオープンしている場合は True を返します。
オープンできない場合は False を返し、LastError プロパティにエラーコードが設定されます。
オープンするCOMポートは PortName プロパティで設定したポートになります。
オープンして初めて通信することができるようになります。
Close
IDL HRESULT _stdcall Close( void );
VB Sub Close()
Delphi procedure Close; safecall;

[解説]
通信ポートをクローズします。これは Active=False と同じです。
クローズしている間は通信できません。
ReadMemory
IDL HRESULT _stdcall ReadMemory([in] short Addr, [out] IPhoneNumber ** PhoneNumber, [out, retval] VARIANT_BOOL * Result );
VB Function ReadMemory(Addr As Integer, PhoneNumber As PhoneNumber) As Boolean
Delphi function ReadMemory(Addr: Smallint; out PhoneNumber: IPhoneNumber): WordBool; safecall;

[解説]
アロハPC1のメモリを読み出します。
Addr には読み出すメモリアドレス(1 ~ 30)を指定します。PhoneNumber は出力パラメータなので値の設定はしません。
正常に読み出せた場合は True を返し、さらに PhoneNumber に読み出した電話番号データがセットされます。
エラーの場合は False を返し、LastError プロパティにエラーコードが設定されます。

VB のコード例)
-------------------------------------------
Dim aloha As NDAAlohaPC1.AlohaPC1CommX
Dim phoneNumber As NDAAlohaPC1.PhoneNumber
...
' アドレス1を読み出す
If aloha.ReadMemory(1, phoneNumber) Then
 ' ここに正常に読み出せた場合の処理
Else
 ' エラー時の処理
End If
-------------------------------------------

Delphi のコード例)
-------------------------------------------
var
 Aloha: IAlohaPC1CommX;
 PhoneNumber: IPhoneNumber;
begin
 // オブジェクトの生成
 Aloha := CreateOleObject('NDAAlohaPC1.AlohaPC1CommX') as IAlohaPC1CommX;
 ...
 if Aloha.ReadMemory(1, PhoneNumber)
  // ここに呼び出せた場合の処理
 else
  // エラー時の処理
end;
-------------------------------------------

なお、VBScript からはこのメソッドは呼び出せないので、代わりに ReadMemory2 メソッドを使って下さい。
ReadMemory2
IDL HRESULT _stdcall ReadMemory2([in] short Addr, [out, retval] IPhoneNumber ** Result );
VB Function ReadMemory2(Addr As Integer) As PhoneNumber
Delphi function ReadMemory2(Addr: Smallint): IPhoneNumber; safecall;

[解説]
アロハPC1のメモリを読み出します。機能自体は ReadMemory メソッドと同じですが呼び出し方が異なります。
Addr には読み出すメモリアドレス(1 ~ 30)を指定します。
正常に読み出せた場合は NDAAlohaPC1CommX.PhoneNumber オブジェクト(正確には IPhoneNumber インターフェースポインタ)を返します。
エラーの場合は LastError プロパティにエラーコードが設定され、呼び出し側にCOM(Component Object Model)エラーを返します。そのため呼び出し側でエラー(例外)ハンドリングする必要があります。

VB のコード例)
-------------------------------------------
Dim aloha As NDAAlohaPC1.AlohaPC1CommX
Dim phoneNumber As NDAAlohaPC1.PhoneNumber
...
' アドレス1を読み出す
On Error Resume Next
Set phoneNumber = aloha.ReadMemory2(1)

' エラーの場合は Error オブジェクトにエラー内容が設定されている
' (Error.Number が 0 以外ならエラー)
If Error.Number <> 0 Then
 ' エラー処理
End If
-------------------------------------------

VBScript のコード例)
-------------------------------------------
' オブジェクト作成
Set aloha = Server.CreateObject("NDAAlohaPC1.PhoneNumber")
...
' アドレス1を読み出す
On Error Resume Next
Set phoneNumber = aloha.ReadMemory2(1)

' エラーの場合は Err オブジェクトにエラー内容が設定されている
' (Err.Number が 0 以外ならエラー)
If Err.Number <> 0 Then
 ' エラー処理
End If
-------------------------------------------

Delphi のコード例)
-------------------------------------------
var
 Aloha: IAlohaPC1CommX;
 PhoneNumber: IPhoneNumber;
begin
 // オブジェクトの生成
 Aloha := CreateOleObject('NDAAlohaPC1.AlohaPC1CommX') as IAlohaPC1CommX;
 ...
 try
  // アドレス1を読み出す
  PhoneNumber := Aloha.ReadMemory2(1);
 except
  on E: EOleException do
   // ここにエラー時の処理を書く
 end;
end;
-------------------------------------------
WriteMemory
IDL HRESULT _stdcall WriteMemory([in] BSTR Number, [out, retval] VARIANT_BOOL * Result );
VB Function WriteMemory(Number As String) As Boolean
Delphi function WriteMemory(const Number: WideString): WordBool; safecall;

[解説]
アロハPC1のメモリに電話番号を書き込みます。
Number パラメータには書き込む電話番号(数字のみ)を指定します。
正常に書き込めた場合は True を返します。
エラーの場合は False を返し、LastError プロパティにエラーコードが設定されます。


■ イベント

OnPhoneDetect


IDL HRESULT OnPhoneDetect([in] IPhoneNumber * PhoneNumber );
VB Event OnPhoneDetect(PhoneNumber As PhoneNumber)
Delphi procedure OnPhoneDetect(const PhoneNumber: IPhoneNumber);

[解説]
電話を着信すると、このイベントが発生します。ただし、通信ポートがオープンされていないと電話を着信してもイベントは発生しません。
PhoneNumber には電話番号データが入っています。

VB のコード例)
-------------------------------------------
Private WithEvents aloha As NDAAlohaPC1.AlohaPC1CommX

' 電話着信時の処理
Private Sub aloha_OnPhoneDetect(ByVal phoneNumber As NDAAlohaPC1.IPhoneNumber)
 ' 必要に応じて何らの処理をする
End Sub
-------------------------------------------

Delphi についてはラッパコンポーネントを作って、オブジェクトインスペクタでイベントハンドラを設定する方が簡単です。

VBScript(ASP) からはイベント処理することはできません。
OnCommError
IDL HRESULT OnCommError([in] long CommErrCode );
VB Event OnCommError(CommErrCode As Long)
Delphi procedure OnCommError(CommErrCode: Integer);

[解説]
電話着信時に、アロハPC1と通信して電話番号データを取り込みますが、その際、RS-232C回線エラーが発生したときにこのイベントが発生します。
CommErrCode には回線エラーコードが入っています。この値は Win32API の ClearCommError で取得した値です。

VB のコード例)
-------------------------------------------
Private WithEvents aloha As NDAAlohaPC1.AlohaPC1CommX

' 電話着信時の通信回線エラー処理
Private Sub aloha_OnCommError(ByVal CommErrCode As Long)
 ' 必要に応じて何らの処理をする
End Sub
-------------------------------------------

Delphi についてはラッパコンポーネントを作って、オブジェクトインスペクタでイベントハンドラを設定する方が簡単です。

VBScript(ASP) からはイベント処理することはできません。
OnError
IDL HRESULT OnError([in] BSTR Msg );
VB Event OnError(Msg As String)
Delphi OnError(const Msg: WideString);

[解説]
電話着信時に、アロハPC1と通信して電話番号データを取り込みますが、その際、通信エラーが発生したときにこのイベントが発生します。
Msg にはエラーメッセージが入っています。

VB のコード例)
-------------------------------------------
Private WithEvents aloha As NDAAlohaPC1.AlohaPC1CommX

' 電話着信時の通信エラー処理
Private Sub aloha_OnError(ByVal Msg As String)
 ' 必要に応じて何らの処理をする
End Sub
-------------------------------------------

Delphi についてはラッパコンポーネントを作って、オブジェクトインスペクタでイベントハンドラを設定する方が簡単です。

VBScript(ASP) からはイベント処理することはできません。







↑ページトップへ

Copyright© 2002 Hitwareland Corporation.