4.6.2 バイナリデータを使用する場合のCallメソッドの使用例

バイナリデータを使用する場合のCallメソッドの使用例を次に示します。

この例で呼び出すSPPのサービスの情報は次のとおりです。

<この項の構成>
(1) Callメソッドの使用例(SUP.NET,C#の場合)
(2) Callメソッドの使用例(SUP.NET,J#の場合)
(3) Callメソッドの使用例(SUP.NET,Visual Basicの場合)

(1) Callメソッドの使用例(SUP.NET,C#の場合)

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class MyApplication1
 {
   …
   public static void Main(string[] args)
   {
     try {
       Rpc.Open();                 // RPCオープン
       Adm.Complete();             // SUP.NET開始処理完了通知

       int    maxInLen = 512;      // 入力データ格納領域長
       int    maxOutLen = 512;     // 応答データ格納領域長
       int    inLen = 0;           // 入力データ長
       int    outLen = maxOutLen;  // 応答データ最大長
       byte[] inData;              // 入力データ格納領域
       byte[] outData;             // 応答データ格納領域
       String inStr = "Say Hello to OpenTP1!";  // 入力データ
       String outStr = null;                    // 応答データ
       byte[] inDataTemp;

       inData = new byte[maxInLen];
       System.Text.Encoding enc = System.Text.Encoding.Default;
       inDataTemp = enc.GetBytes(inStr);
       System.Array.Copy(           // 入力データの設定
           inDataTemp, 0, inData, 0, inDataTemp.Length);
       inLen += inDataTemp.Length;
       outData = new byte[maxOutLen];
       // RPC実行
       Rpc.Call("SVGRP1", "SERV1", inData, inLen,
           outData, ref outLen, TP1ServerFlags.DCNOFLAGS);
       outStr = enc.GetString(outData, 0, outLen);

       Rpc.Close();                 // RPCクローズ
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
 }
}

(2) Callメソッドの使用例(SUP.NET,J#の場合)

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class MyApplication1
{
 …
 public static void main(String[] args)
 {
   try {
     Rpc.Open();                   // RPCオープン
     Adm.Complete();               // SUP.NET開始処理完了通知

     int     maxInLen = 512;       // 入力データ格納領域長
     int     maxOutLen = 512;      // 応答データ格納領域長
     int     inLen  = 0;           // 入力データ長
     int     outLen = maxOutLen;   // 応答データ最大長
     ubyte[] inData;               // 入力データ格納領域
     ubyte[] outData;              // 応答データ格納領域
     String  inStr = "Say Hello to OpenTP1!";  // 入力データ
     String  outStr = null;                    // 応答データ
     ubyte[] inDataTemp;

     inData = new ubyte[maxInLen];
     System.Text.Encoding enc =
                 System.Text.Encoding.get_Default();
     inDataTemp = enc.GetBytes(inStr);
     System.Array.Copy(            // 入力データの設定
         inDataTemp, 0, inData, 0, inDataTemp.length);
     inLen += inDataTemp.length;
     outData = new ubyte[maxOutLen];
     // RPC実行
     Rpc.Call("SVGRP1", "SERV1", inData, inLen,
         outData, outLen, TP1ServerFlags.DCNOFLAGS);
     outStr = enc.GetString(outData, 0, outLen);

     Rpc.Close();                  // RPCクローズ
   } catch (TP1ServerException exp) {
     // OpenTP1(クラスライブラリ)が検知したエラー
   } catch (TP1Exception exp) {
     // OpenTP1が検知したエラー
   } catch (System.Exception exp) {
     // 予期しない例外
   }
 }
}

(3) Callメソッドの使用例(SUP.NET,Visual Basicの場合)

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
 Public Class MyApplication1
   …
   Public Shared Sub Main(ByVal args() As String)
     Dim maxInLen As Integer = 512       ' 入力データ格納領域長
     Dim maxOutLen As Integer = 512      ' 応答データ格納領域長
     Dim inLen As Integer                ' 入力データ長
     Dim outLen As Integer               ' 応答データ最大長
     Dim inData(maxInLen - 1) As Byte    ' 入力データ格納領域
     Dim outData(maxOutLen - 1) As Byte  ' 応答データ格納領域
     Dim inStr As String                 ' 入力データ
     Dim outStr As String                ' 応答データ
     Dim inDataTemp() As Byte
     Dim enc As System.Text.Encoding
     Try
       Rpc.Open()           ' RPCオープン
       Adm.Complete()       ' SUP.NET開始処理完了通知

       inLen = 0
       outLen = maxOutLen
       inStr = "Say Hello to OpenTP1!"
       enc = System.Text.Encoding.Default
       inDataTemp = enc.GetBytes(inStr)
       System.Array.Copy(inDataTemp, 0, inData,  _
           0, inDataTemp.Length)         ' 入力データの設定
       inLen += inDataTemp.Length
       ' RPC実行
       Rpc.Call("SVGRP1", "SERV1", inData, inLen,  _
           outData, outLen, TP1ServerFlags.DCNOFLAGS)
       outStr = enc.GetString(outData, 0, outLen)

       Rpc.CloseRpc()       ' RPCクローズ
     Catch exp As TP1ServerException
     ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
     ' その他OpenTP1が検知したエラー
     Catch exp As Exception
     ' 予期しない例外
     End Try
   End Sub
 End Class
End Namespace