線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1804
推到 Plurk!
推到 Facebook!

請教Indy如何傳送Record型態的值

尚未結案
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-03 13:50:58 IP:61.58.xxx.xxx 未訂閱
請教前輩
  小弟自定一個Record型態,如下

Type
  TMsg = packed record
    v1: String;
    v2: String;
  end;    1. 請教用IdTCPClient元件要如何傳送此型態的值
2. 在IdTCPServer接收後,如何轉成TMsg型態    感激不盡
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-03 14:18:55 IP:202.39.xxx.xxx 未訂閱
把 TMsg 型態成 TStream 再做傳送? --- 每個人都是一本書
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-03 15:45:36 IP:61.58.xxx.xxx 未訂閱
引言: 把 TMsg 型態成 TStream 再做傳送? --- 每個人都是一本書
感謝前輩,可是小弟試了之後出前Invalid typecast的
錯誤訊息,以下是程式碼,請教是那錯了呢    type
  TMyMsg = packed record
    v1: String;
    v2: String;
  end;
 
 
procedure TForm2.BitBtn1Click(Sender: TObject);
var
  MyMsg: TMyMsg;
begin
  MyMsg.v1 := 'ttt';
  MyMsg.v2 := Edit1.Text;
  IdTCPClient1.WriteStream(TStream(MyMsg));
end;    
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-03 16:20:00 IP:202.39.xxx.xxx 未訂閱
大概像這樣吧:
// 將 MyMsg 載入 TMemoryStream
var 
  Stream1: TStream;
  sList: TStringList;
  MyMsg: TMsg;
begin
  Stream1 := TMemoryStream.Create;
  sList := TStringList.Create;
  try
    Stream1.WriteBuffer(MyMsg, SizeOf(TMsg));
    sList.Add(MyMsg.v1);
    sList.Add(MyMsg.v2);
    sList.SaveToStream(Stream1);
    // 接下來做傳送的動作
  finally
    sList.Free;
    Stream.Free;
  end;
end;
   
// 從 TMemoryStream 讀出 MyMsg
var
  ms1: TStream;
  sList: TStringList;
  MyMsg: TMsg;
begin
  Stream1 := TMemoryStream.Create;
  sList := TStringList.Create;
  try
    Stream1.ReadBuffer(MyMsg, SizeOf(TMsg));
    sList.LoadFromStream(Stream1);
    MyMsg.v1 := sList.Strings[0];
    MyMsg.v2 := sList.Strings[1];
  finally
    sList.Free;
    Stream.Free;
  end;
end;
另外, Delphi 本身就有 TMsg 的型態 不知道這樣會不會有問題? --- 每個人都是一本書 發表人 - hagar 於 2003/04/03 16:30:37
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-08 09:42:48 IP:61.58.xxx.xxx 未訂閱
引言: 大概像這樣吧:
// 將 MyMsg 載入 TMemoryStream
var 
  Stream1: TStream;
  sList: TStringList;
  MyMsg: TMsg;
begin
  Stream1 := TMemoryStream.Create;
  sList := TStringList.Create;
  try
    Stream1.WriteBuffer(MyMsg, SizeOf(TMsg));
    sList.Add(MyMsg.v1);
    sList.Add(MyMsg.v2);
    sList.SaveToStream(Stream1);
    // 接下來做傳送的動作
  finally
    sList.Free;
    Stream.Free;
  end;
end;
   
// 從 TMemoryStream 讀出 MyMsg
var
  ms1: TStream;
  sList: TStringList;
  MyMsg: TMsg;
begin
  Stream1 := TMemoryStream.Create;
  sList := TStringList.Create;
  try
    Stream1.ReadBuffer(MyMsg, SizeOf(TMsg));
    sList.LoadFromStream(Stream1);
    MyMsg.v1 := sList.Strings[0];
    MyMsg.v2 := sList.Strings[1];
  finally
    sList.Free;
    Stream.Free;
  end;
end;
另外, Delphi 本身就有 TMsg 的型態 不知道這樣會不會有問題? --- 每個人都是一本書 發表人 - hagar 於 2003/04/03 16:30:37
感謝前輩 試了好久,也是不行,Server端都無反應,IdTCPServer端的OnExecute都 沒觸發,好像Client的東東沒送過去,若用Writeln就很正常,但用 WriteStream(Stream1),就沒反應了,小弟再試試,有心得會再po上來 謝謝
Skyer
高階會員


發表:43
回覆:111
積分:120
註冊:2002-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-08 14:14:55 IP:61.231.xxx.xxx 未訂閱
去年剛好有在研究 Indy 的 HTTP 元件 把研究的研果傳上來給您看看..    是一個小型的 Client / Server 程式, 我也有用到 record  用來當 data 的 header    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28319 -- Regards, Skyer
------
--
Regards,
Skyer
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-08 15:55:43 IP:61.58.xxx.xxx 未訂閱
引言: 去年剛好有在研究 Indy 的 HTTP 元件 把研究的研果傳上來給您看看.. 是一個小型的 Client / Server 程式, 我也有用到 record 用來當 data 的 header http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28319 -- Regards, Skyer
感謝前輩的分享,小弟下載研究研究,再次感謝
系統時間:2024-05-07 10:51:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!