MIDAS中不可以传递自定义的结构体,或者数据流之类的.可以借助Variant来实现这一功能.

 1 //将VarArray转换成结构体,这种转换只需要设计接口时传回Variant和Rec的Size就可以了.
2
3 procedure VarAryToRec(aVar: Variant; const Size:Integer; var Rec);
4 var
5 pb: PByteArray;
6 i: Integer;
7 begin
8 FillChar(Rec, Size, 0);
9 pb := @Rec;
10 for i := 0 to Size - 1 do begin
11 Pb^[i] := aVar[i];
12 end;
13 end;
14
15 //将结构体转换成VarAry,这种转换需要先建立一个VarAry,然后再通过接口传递.
16
17 procedure RecToVarAry(const Rec; const Size: Integer;var aVar:Variant);
18 var
19 pb: PByteArray;
20 i: Integer;
21 begin
22 pb := @Rec;
23 for i := 0 to Size -1 do begin
24 aVar[i] := pb^[i];
25 end;
26 end;
27
28 //Client调用示例
29
30 var
31 aVar: Variant;
32 Size: Integer;
33 Done: Integer;
34
35 begin
36
37 Size := SizeOf(Rec);
38 aVar := VarArrayCreate([0, Size - 1], varByte);
39 try
40 RecToVarAry(Rec, Size, aVar);
41 SocketConnection.AppServer.InserDataRecord(Size, aVar, Done);
42 if not Boolean(Done) then
43 Exit;
44 DataIndex := Done;
45 finally
46 aVar := Unassigned;
47 end;
48
49 end;
50
51 //服务器端示例,这个接口需要在IAppServer中设计好.
52
53 procedure TAppSer.InserDataRecord(Size: Integer; Data: OleVariant;
54 out Done: Integer);
55 var
56 Rec: TSampleDataRecord;
57 n: Integer;
58 begin
59 Done := -1;
60 if not ADOConnection.Connected then
61 Exit;
62 VarAryToRec(Data, Size, Rec);
63 //...........
64
65 end;

  

posted on 2011-07-21 22:28  solokey  阅读(275)  评论(0编辑  收藏  举报