4.1.1 .NETインタフェース定義

.NETインタフェース定義は,次のUAPからSPP.NETに対して.NETインタフェース定義を使用してRPCを実行する場合に定義します。

ここでは,.NETインタフェース定義の定義方法の詳細について説明します。.NETインタフェース定義を使用したRPCについては,「1.3.2(1)(a) .NETインタフェース定義を使用したRPC」を参照してください。

<この項の構成>
(1) .NETインタフェース定義の定義方法
(2) TP1ユーザ構造体
(3) .NETインタフェース定義の定義例

(1) .NETインタフェース定義の定義方法

(a) .NETインタフェース定義に使用する言語

SPP.NETの.NETインタフェース定義は,SPP.NETを開発するプログラム言語で定義します。.NETインタフェース定義を定義する場合,次のプログラム言語が使用できます。

各プログラム言語でのインタフェースの定義文法は,Visual Studioや.NET Framework SDKのドキュメントを参照してください。

なお,.NETインタフェース定義は,Visual Studioや.NET Framework SDKが提供する各プログラム言語のコンパイラで,.NET FrameworkおよびOpenTP1 for .NET Frameworkが提供するクラスライブラリだけを参照してコンパイルできる必要があります。

(b) .NETインタフェース定義の定義規則

SPP.NETのインタフェースを定義する場合,次の規則があります。これらの規則に従っていない場合,SPP.NETの.NETインタフェース定義として使用できません。

(2) TP1ユーザ構造体

(a) TP1ユーザ構造体とは

TP1ユーザ構造体は,複数の値をまとめて保持できるクラスのことです。

(b) TP1ユーザ構造体の定義規則

TP1ユーザ構造体を定義する場合の規則を次に示します。

 

注意
publicプロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。
(c) TP1ユーザ構造体のプロパティとして利用できるデータ型

TP1ユーザ構造体のプロパティとして利用できるデータ型,およびメソッドの引数として使用できるパラメタ属性を次の表に示します。

表4-3 TP1ユーザ構造体のプロパティとして利用できるデータ型

共通型システムプログラム言語
C#J#Visual Basic
System.BytebyteubyteByte
System.Int16shortshortShort
System.Int32intintInteger
System.Int64longlongLong
System.StringstringStringString
System.Byte[]byte[]ubyte[]Byte()
System.Int16[]short[]short[]Short()
System.Int32[]int[]int[]Integer()
System.Int64[]long[]long[]Long()
System.String[]string[]String[]String()
TP1ユーザ構造体
TP1ユーザ構造体配列
(凡例)
-:プログラム言語による差異はありません。
(d) TP1ユーザ構造体の参照渡しの方法

TP1ユーザ構造体の参照渡しをするには,パラメタ属性を使用します。ただし,J#の場合は参照渡しができないため,Hitachi.OpenTP1.ITP1UserStructHolderを実装する必要があります。実装上の規則を次に示します。

なお,プロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。TP1ユーザ構造体の参照渡しの使用例については,「4.1.1(3)(b) J#での定義例」を参照してください。

(3) .NETインタフェース定義の定義例

(a) C#での定義例

using System;
using Hitachi.OpenTP1;
namespace MyCompany
{

 public interface IGyoumuA
 {
   void Service1(string dataId, byte[] data);
   string[] Service2(string key);
   int Service3(int inCount, ref string[] ids);
   short Service4(MyStruct inStruct);
 }
 public class MyStruct : TP1UserStruct
 {
     private int id;
     private string name;

     public MyStruct(){}

     public int Id
     {
       set{
          id = value;
       }
       get{
          return id;
       }
     }

     public string Name
     {
        set{
           name = value;
        }
        get{
           return name;
        }
     }
 }
}

(b) J#での定義例

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

public interface IGyoumuA
{
   void Service1(String dataId, ubyte[] data);
   String[] Service2(String key);
   int Service3(int inCount, StringArrayHolder ids);
   short Service4(MyStruct inStruct, MyStructHolder outStruct);
}

//TP1ユーザ構造体の参照渡しをするためのクラス
public class MyStructHolder implements ITP1UserStructHolder
{
  private MyStruct val;
  /** @property */
  public void set_Value(MyStruct value)
  {
         val = value;
  }
  /** @property */
  public MyStruct get_Value()
  {
         return val;
  }
}

//TP1ユーザ構造体
public class MyStruct extends TP1UserStruct
{
  private int id;
  private String name;

  public MyStruct()
  {
  }

  /** @property */
  public void set_Id(int value)
  {
         id = value;
  }
  /** @property */
  public int get_Id()
  {
         return id;
  }
  /** @property */
  public void set_Name(String value)
  {
         name = value;
  }
  /** @property */
  public String get_Name()
  {
         return name;
  }
}

(c) Visual Basicでの定義例

Imports System
Imports Hitachi.OpenTP1
Namespace MyCompany
 Public Interface IGyoumuA
   Sub Service1(ByVal dataId As String, ByVal data() As Byte)
   Function Service2(ByVal key As String) As String()
   Function Service3(ByVal inCount As Integer, _
                     ByRef ids() As String) As Integer
   Function Service4(ByVal inStruct As MyStruct) As Short
 End Interface

 Public Class MyStruct
     Inherits TP1UserStruct
     Private idValue As Integer
     Private nameValue As String

     Public Sub New()
     End Sub

     Public Property Id() As Integer
         Set(ByVal value As Integer)
              idValue = value
         End Set
         Get
              Return idValue
         End Get
     End Property

     Public Property Name() As String
         Set(ByVal value As String)
              nameValue = value
         End Set
         Get
              Return nameValue
         End Get
     End Property
 End Class
End Namespace