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

請教這一行的功能

答題得分者是:pgdennis
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-04 11:18:15 IP:61.221.xxx.xxx 未訂閱
TSymbolEntry = record Definition : TrecDef; iiNoOfRef: integer; // start from zero end; pTSymbolEntry = ^TSymbolEntry; hMem : THandle; prSymbol: pTSymbolEntry; hMem := GlobalAlloc(2, sizeof(TSymbolEntry) * 1000); prSymbol := pTSymbolEntry(GlobalLock(hMem)); 請教這一行該如何解釋與功能為何 prSymbol := pTSymbolEntry(GlobalLock(hMem)); 謝謝
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-06 00:41:26 IP:61.59.xxx.xxx 未訂閱
prSymbol := pTSymbolEntry(GlobalLock(hMem)); 應該是說GlobalLock(hMem))取得配置記憶體的第一個Byte的指標後,再轉型為pTSymbolEntry形態的指標
------
星期一,二...無窮迴圈@@
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-08 11:32:14 IP:61.221.xxx.xxx 未訂閱
謝謝您的回答 可是還是不太懂這樣做要幹啥 還是謝謝您
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-08 23:22:20 IP:211.74.xxx.xxx 未訂閱
引言: 謝謝您的回答 可是還是不太懂這樣做要幹啥 還是謝謝您
prSymbol是個指標, 口語化一點-->就是宣告一塊專用記憶體給prSymbol使用
------
星期一,二...無窮迴圈@@
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-09 08:32:51 IP:61.221.xxx.xxx 未訂閱
但是前面已經prSymbol: pTSymbolEntry; 那還要宣告一塊專用記憶體給prSymbol使用 Record用這樣子有什麼好處嗎
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-09 09:01:06 IP:61.219.xxx.xxx 未訂閱
引言: 但是前面已經prSymbol: pTSymbolEntry; 那還要宣告一塊專用記憶體給prSymbol使用 Record用這樣子有什麼好處嗎
如果指標record沒有先配置記憶體...你run下面的程式碼...在丟值給V1.my時就會出錯,但V.my就沒問題
 unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  T=record
   my:string;
  end;
  T1=^T;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
var
 V:T;
 V1:T1;
begin
 V.my:='ddd';
 showmessage(V.my);     V1.my:='ddd';
 showmessage(V1^.my);
end;    end.
------
星期一,二...無窮迴圈@@
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-09 09:20:09 IP:61.221.xxx.xxx 未訂閱
那我可以用 NEW(T1) 嗎
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-09 10:35:21 IP:61.219.xxx.xxx 未訂閱
引言: 那我可以用 NEW(T1) 嗎
yes,在V1.my:=...這行執行前,先執行new(V1), 那V1.my:=...就可以run了
------
星期一,二...無窮迴圈@@
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-09 10:42:43 IP:61.221.xxx.xxx 未訂閱
您的意思是 若是只用單純的Record 就直接宣告後就可用 若是要用Record的指標 就要在宣告之後,再分配一段記憶體給他才能使用是嗎
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-09 16:56:00 IP:61.219.xxx.xxx 未訂閱
引言: 您的意思是 若是只用單純的Record 就直接宣告後就可用 若是要用Record的指標 就要在宣告之後,再分配一段記憶體給他才能使用是嗎
沒錯...
------
星期一,二...無窮迴圈@@
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-09 17:08:30 IP:61.221.xxx.xxx 未訂閱
再請教一個問題 那為何他不用 NEW 而要用GlobalAlloc,GlobalLock呢 有何差異呢 謝謝
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-09 22:01:17 IP:61.59.xxx.xxx 未訂閱
引言: 再請教一個問題 那為何他不用 NEW 而要用GlobalAlloc,GlobalLock呢 有何差異呢 謝謝
這我也不懂....你應該去看三者的定義...online help...
------
星期一,二...無窮迴圈@@
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-04-10 01:30:58 IP:211.76.xxx.xxx 未訂閱
引言: TSymbolEntry = record Definition : TrecDef; iiNoOfRef: integer; // start from zero end; pTSymbolEntry = ^TSymbolEntry; hMem : THandle; prSymbol: pTSymbolEntry; hMem := GlobalAlloc(2, sizeof(TSymbolEntry) * 1000); prSymbol := pTSymbolEntry(GlobalLock(hMem)); 請教這一行該如何解釋與功能為何 prSymbol := pTSymbolEntry(GlobalLock(hMem)); 謝謝
他應該只是為了方便操作 所以把他轉型為TSymbolEntry的型態 轉型後才可以用prSymbol.Definition 或是prSymbol.iiNoOfRef
系統時間:2024-05-03 4:04:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!