4.6.2 バイナリデータを使用する場合のCallメソッドの使用例
バイナリデータを使用する場合のCallメソッドの使用例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
-
サービスグループ名:SVGRP1
-
呼び出すサービス名:SERV1
- 〈この項の構成〉
(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