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

Ptr(Seg0040, $006c) 該如何修正 ?

答題得分者是:syntax
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-06 12:07:48 IP:61.219.xxx.xxx 未訂閱
下面程式想改成 Delphi 7
高速拷貝文件
http://www.vbzx.net/ArticleView/vbzx_Article_View_1344.asp

Compile 下面這行錯誤
Ticks := Ptr(Seg0040, $006c); // Undeclared identifier 'Seg0040'

改成這樣也不行
Ticks := Ptr($0040, $006c); // Segment/Offset pairs not supported in Borland 32-bit Pascal

請問該改成如何 ?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-06 13:04:55 IP:60.248.xxx.xxx 未訂閱
好久沒用指標了,我剛剛試一下,程式碼不一定可以run,不過觀念上差不多是這樣吧
<textarea class="delphi" rows="10" cols="60" name="code"> var pint:^Integer; aInt:array[0..10] of Integer; v:Integer; begin aInt[1]:=20; aInt[2]:=10; pInt:=Ptr(aInt[1]); Inc(pInt,1); v:=pInt; ShowMessage(IntToStr(v)); end;</textarea>
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-14 16:50:06 IP:61.64.xxx.xxx 訂閱
看不出來「哪裡高速」
不過一個標準的 copy 動作
用 Ptr(Seg0040, $006c); ,還不如用 GetTickCount
大陸的東西,不全可信
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-14 17:52:46 IP:211.22.xxx.xxx 未訂閱
很久沒玩CONSOLE的程式了,本想玩玩但是發現那塊程式碼不完整!OK~不過小弟還是有點資訊提供。

32-bit code no longer uses the segment/offset addressing scheme that 16-bit code used.
In 16-bit versions of Borland Pascal, segment/offset pairs were used to declare absolute variables, and as arguments to the Ptr standard function.
Note that absolute addresses should not be used in 32-bit protected mode programs. Instead appropriate Win32 API functions should be called.

program Produce; //這塊程式碼COMPILE不會過
var
VideoMode : Integer absolute $0040:$0049;
begin
Writeln( Byte(Ptr($0040,$0049)^) );
end.

program Solve; //這塊程式碼COMPILE會過,但是跑不起來
(*This version will compile, but will not run; absolute addresses are to be carefully avoided*)
//var
// VideoMode : Integer absolute $0040*16 $0049;
begin
Writeln( Byte(Ptr($0040*16 $0049)^) );
end.
因此傳統的16bit方法都不可以用,必須要呼叫windows api,但是是那個API有類似Ptr的效果呢?小弟也在找資料!
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-16 20:52:33 IP:61.64.xxx.xxx 訂閱
那行程式不過是在計時用

既然是在計算時間

看你要用 BIOS TIME 還是用我說的 windows API GettickCount 還是用高精度計時器都可以

這不是問題吧,何必執著在一定要用該行程式?更不用說是過時的東西,還是說你還在用 暈倒救我?
就算是,也不一定要用該計時方式,方法那麼多

還是說,你程式沒看懂?

实现高速文件拷贝 ?

直接用 windows API 複製,會慢到讓人無法接受?
那用 xASM 來寫,就最快囉!
系統時間:2024-05-17 18:08:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!