4.1.1 .NETインタフェース定義
.NETインタフェース定義は,次のUAPからSPP.NETに対して.NETインタフェース定義を使用してRPCを実行する場合に定義します。
-
SPP.NET
-
SUP.NET
-
CUP.NET(Connector .NETを利用してSPP.NETにサービスを要求するアプリケーションを含みます)
ここでは,.NETインタフェース定義の定義方法の詳細について説明します。.NETインタフェース定義を使用したRPCについては,「1.3.2(1) .NETインタフェース定義を使用したRPC」を参照してください。
(1) .NETインタフェース定義の定義方法
(a) .NETインタフェース定義に使用する言語
SPP.NETの.NETインタフェース定義は,SPP.NETを開発するプログラム言語で定義します。.NETインタフェース定義を定義する場合,次のプログラム言語が使用できます。
-
C#
-
Visual Basic
各プログラム言語でのインタフェースの定義文法は,Visual Studioや.NET Framework SDKのドキュメントを参照してください。
なお,.NETインタフェース定義は,Visual Studioや.NET Framework SDKが提供する各プログラム言語のコンパイラで,.NET FrameworkおよびOpenTP1 for .NET Frameworkが提供するクラスライブラリだけを参照してコンパイルできる必要があります。
(b) .NETインタフェース定義の定義規則
SPP.NETのインタフェースを定義する場合,次の規則があります。これらの規則に従っていない場合,SPP.NETの.NETインタフェース定義として使用できません。
-
名前空間名,インタフェース名,メソッド名には,半角英数字および半角アンダスコア(_)が使用できます。なお,名前空間の区切り文字として半角ピリオド(.)が使用できます。
-
メソッドの引数および戻り値に使用できるデータ型を次の表に示します。
表4‒1 メソッドの引数および戻り値で使用できるデータ型 共通型システム
プログラム言語
C#
Visual Basic
System.Void※
void
−
System.Byte
byte
Byte
System.Int16
short
Short
System.Int32
int
Integer
System.Int64
long
Long
System.String
string
String
System.Byte[]
byte[]
Byte()
System.Int16[]
short[]
Short()
System.Int32[]
int[]
Integer()
System.Int64[]
long[]
Long()
System.String[]
string[]
String()
TP1ユーザ構造体
−
−
TP1ユーザ構造体配列
−
−
- (凡例)
-
−:プログラム言語による差異はありません。
- 注※
-
System.Voidはメソッドの戻り値にだけ指定できます。
-
メソッドの引数に使用できるパラメタ属性を次の表に示します。
表4‒2 メソッドの引数に使用できるパラメタ属性 意味
プログラム言語
C#
Visual Basic
値渡し
var(省略可)
ByVal(省略可)
出力渡し
out
指定不可※
参照渡し
ref
ByRef
- 注※
-
out属性はC#固有の属性です。C#以外では指定できません。C#以外のプログラム言語で使用する場合は,代わりに参照渡しを使用してください。
-
メソッド名の長さは31文字以内でなければなりません。なお,メソッド名はSPP.NETのサービス名になります。
-
メソッド名は英字で始まる必要があります。
-
メソッドのオーバロードはできません。
-
大文字,小文字だけが異なる同じ名称のメソッドを定義することはできません。
(2) TP1ユーザ構造体
(a) TP1ユーザ構造体とは
TP1ユーザ構造体は,複数の値をまとめて保持できるクラスのことです。
(b) TP1ユーザ構造体の定義規則
TP1ユーザ構造体を定義する場合の規則を次に示します。
-
TP1ユーザ構造体として利用するクラスは,Hitachi.OpenTP1.TP1UserStructクラスを継承します。
-
デフォルトコンストラクタ(アクセス修飾子がpublicで,引数のないコンストラクタ)を持つ必要があります。
-
set,get両方のアクセサを持つpublicプロパティが一つ以上必要です。
-
大文字,小文字だけが異なる同一名称のプロパティを定義することはできません。
- 注意事項
-
publicプロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。
(c) TP1ユーザ構造体のプロパティとして利用できるデータ型
TP1ユーザ構造体のプロパティとして利用できるデータ型,およびメソッドの引数として使用できるパラメタ属性を次の表に示します。
共通型システム |
プログラム言語 |
|
---|---|---|
C# |
Visual Basic |
|
System.Byte |
byte |
Byte |
System.Int16 |
short |
Short |
System.Int32 |
int |
Integer |
System.Int64 |
long |
Long |
System.String |
string |
String |
System.Byte[] |
byte[] |
Byte() |
System.Int16[] |
short[] |
Short() |
System.Int32[] |
int[] |
Integer() |
System.Int64[] |
long[] |
Long() |
System.String[] |
string[] |
String() |
TP1ユーザ構造体 |
− |
− |
TP1ユーザ構造体配列 |
− |
− |
- (凡例)
-
−:プログラム言語による差異はありません。
(3) .NETインタフェース定義の定義例
.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) 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