CStruct(CObject)

導入されたバージョン 0.90β
擬似的な構造体を生成し、保持するクラスです。
Spinelには構造体の概念がないため、このクラスを使って操作します。
また、このクラスを継承して構造体クラスを宣言することで、あたかも構造体を宣言したかのようにクラスを操作できます。

使用例
CStructクラスを使って構造体を宣言する方法です。
CStructを継承し、メンバ名をプロパティとして実装します。
以下の例は構造体PointAPIの宣言です。
宣言コード
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PointAPI(CStruct){
  private:
    function SetX(Val)    { Super.WriteInt(Val,0); }
    function SetY(Val)    { Super.WriteInt(Val,4); }
    function GetX()       { Return Super.ReadInt(0); }
    function GetY()       { Return Super.ReadInt(4); }
    function SetValue(Val){ Super.Value = Val; }
    function GetValue()   { Return Super.Value; }
  public:
    constructor Create(){
      Super.GetMem(8);
    }
    property X(GetX,SetX);
    property Y(GetY,SetY);
    property Value(GetValue,SetValue);
}
このように宣言することで、XとYには自由にアクセスすることが出来ます。
使用するには以下のようにします。
GetCursorPosはWindowsAPIで、カーソル座標を得る命令です。
実行コード
1
2
3
4
5
6
7
8
//DLLの宣言
external "USER32";
import Int GetCursorPos(PChar);

Pos = PointAPI.Create; //生成
GetCursorPos(Pos.Value);
Mes("MousePos:" + Pos.X + "," + Pos.Y);
Pos.Free;
このように、クラスと同等に扱うことが出来ます。
値を取得する場合は、Obj.Valueを使用します。ValueはCStructから継承してください。
コンストラクタ・メソッド・プロパティ概要
constructor Create インスタンスを生成します。
function ReadInt(Pos) Posバイト目をInt形式で読み出します。
function ReadByte(Pos) Posバイト目をByte形式で読み出します。
function ReadIWord(Pos) Posバイト目をWord形式で読み出します。
function ReadDWord(Pos) Posバイト目をDWORD形式で読み出します。
function ReadChar(Pos) Posバイト目をChar形式で読み出します。
function ReadPChar(Pos) Posバイト目をPChar形式で読み出します。
function WriteInt(Val,Pos) ValをPosバイト目にInt形式で書き込みます。
function WriteByte(Val,Pos) ValをPosバイト目にByte形式で書き込みます。
function WriteWord(Val,Pos) ValをPosバイト目にWord形式で書き込みます。
function WriteDWord(Val,Pos) ValをPosバイト目にDWORD形式で書き込みます。
function WriteChar(Val,Pos) ValをPosバイト目にChar形式で書き込みます。
function WritePChar(Val,Pos) ValをPosバイト目にPChar形式で書き込みます。
function GetMem(Size) Sizeバイトメモリを確保します。
クラス CObject からの継承
static
property
ClassName (読)クラス名を返します。
function Free インスタンスを解放します。

詳細
CStruct.Create

コンストラクタです。
サンプルコード
1
2
Obj = CStruct.Create;
Obj.Free;//開放する
CStruct.ReadInt(Pos)

Posバイト目をInt形式で読み出します。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
v = Obj.ReadInt(0);//取得
Obj.Free;
CStruct.ReadByte(Pos)

Posバイト目をByte形式で読み出します。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
v = Obj.ReadByte(0);//取得
Obj.Free;
CStruct.ReadWord(Pos)

Posバイト目をWord形式で読み出します。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
v = Obj.ReadWord(0);//取得
Obj.Free;
CStruct.ReadDWord(Pos)

Posバイト目をDWORD形式で読み出します。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
v = Obj.ReadDWord(0);//取得
Obj.Free;
CStruct.ReadChar(Pos)

Posバイト目をChar形式で読み出します。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
v = Obj.ReadChar(0);//取得
Obj.Free;
CStruct.ReadPChar(Pos)

Posバイト目をPChar(Char*)形式で読み出します。
PCharとは、Charのポインタ型です。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
v = Obj.ReadDWord(0);//取得
Obj.Free;
CStruct.WriteInt(Val,Pos)

ValをPosバイト目にInt形式で書き込みます。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
Obj.WriteInt(100,0);//書き込み
Obj.Free;
CStruct.WriteByte(Val,Pos)

ValをPosバイト目にByte形式で書き込みます。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
Obj.WriteByte(1,0);//書き込み
Obj.Free;
CStruct.WriteWord(Val,Pos)

ValをPosバイト目にWord形式で書き込みます。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
Obj.WriteWord(100,0);//書き込み
Obj.Free;
CStruct.WriteDWord(Val,Pos)

ValをPosバイト目にDWORD形式で書き込みます。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
Obj.WriteDWord(100,0);//書き込み
Obj.Free;
CStruct.WriteChar(Val,Pos)

ValをPosバイト目にChar形式で書き込みます。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
Obj.WriteChar("a",0);//書き込み
Obj.Free;
CStruct.WritePChar(Val,Pos)

ValをPosバイト目にPChar(Char*)形式で書き込みます。
サンプルコード
1
2
3
4
Obj = CStruct.Create;
Obj.GetMem(16);
Obj.WritePChar("name",0);//書き込み
Obj.Free;
CStruct.GetMem(Size)

所持するValueにSizeバイトを確保します。
サンプルコード
1
2
3
Obj = CStruct.Create;
Obj.GetMem(16);//16バイト確保
Obj.Free;
プログラム言語「Spinel
Copyright © 2005 - Giemsa All Rights Reserved.
NOTES Software.