バイナリデータを使用する場合のCallメソッドの使用例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
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) {
// 予期しない例外
}
}
}
}
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) {
// 予期しない例外
}
}
}
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