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

呼叫dll時,變數宣告的問題~

尚未結案
yoyo12345
一般會員


發表:33
回覆:77
積分:22
註冊:2003-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-30 16:14:57 IP:61.220.xxx.xxx 未訂閱
我有一dll宣告如下 function aa(bb:pchar):integer;stdcall; 在實作時,原本我宣告成 var bb[0..255]of char; 但char型態最大只有256位元 若宣告成string,那第0個位元就不見了 請問我的bb字串超過256時,該如何宣告? 謝謝!!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-30 16:23:25 IP:61.155.xxx.xxx 未訂閱
var str:array[0..300] of char;
yoyo12345
一般會員


發表:33
回覆:77
積分:22
註冊:2003-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-30 16:32:55 IP:203.69.xxx.xxx 未訂閱
呃~~我打太快,打錯了啦~~ var bb:array[0..255]of char; char不是只有256個位元嗎? 為什麼可以這樣用? var str:array[0..300] of char;
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-30 16:46:03 IP:61.155.xxx.xxx 未訂閱
这是帮助中的char完整定义:    Character types(字符类型)    基本字符类型是AnsiChar 和WideChar。AnsiChar 是8 位字符集,它们将依照本地字符集的顺序排列,这可能是多字节的。AnsiChar 原先是根据ANSI 字符集建立的,但现在扩展为可以指定本地字符集。WideChar 使用多于一个字节来表示每个字符。在当前实现中,WideChar 依据Unicode 字符集(要意识到它的实现将来可能会改变),使用一个字的宽度(16-bit)来存储字符。开头的256 个Unicode 字符对应于ANSI 字符。 一般字符类型是Char,它相当于AnsiChar。因为Char 的实现可能被迫改变,所以,在需要处理不同大小的字符时,应该使用SizeOf 而不要使用硬编码常数,这通常是个好主意。 一个长度为1 的字符串常量,比如'A',可以表示一个字符。内置函数Chr,返回一个在AnsiChar 或WideChar取值范围内任意一个整数的字符值。比如,Chr(65)返回字母A。字符和整数一样,当因为增加或减少而超过它的取值范围的开头或尾部时,它的值将回转(除非开启了边界检查)。比如,下面的代码执行后 var Letter: Char; I: Integer; begin Letter := High(Letter); for I := 1 to 66 do Inc(Letter); end; Letter 的值将是A(ASCII 值为65)
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-02 14:00:02 IP:210.243.xxx.xxx 未訂閱
引言: 呃~~我打太快,打錯了啦~~ var bb:array[0..255]of char; char不是只有256個位元嗎? 為什麼可以這樣用? var str:array[0..300] of char;
char 為字元型態,記憶体佔用一個位元組(1個Byte= 8 bit,2的8次方因此能夠表達256種字元符號 var bb:array[0..300] of char 基本上array[0..n] of 型態 ,是用來宣告陣列,其中陣列長度[0..n]要定義多少完全是程式設計自己決定,不會受後面所接的型態(不管是Char,byte,Word,integr)所限,會影響的只是所占計憶体大小(陣列長度* 型態大小) 因此宣告 array[0..255] of char 會佔256個byte, array[0..300] of char會佔301個byte 另外純屬個人建議,dll的函數宣告字串可用WideString,可免去自行配置與管理字串計憶体的程式碼 唉~
------
唉~
yoyo12345
一般會員


發表:33
回覆:77
積分:22
註冊:2003-03-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-03 15:41:05 IP:203.69.xxx.xxx 未訂閱
我的dll是c語言寫的~~ 我看書~~它是說c語言的char * 等於delphi的pchar 我經理也是這樣告訴我的!~~ 所以我才會宣告成pchar(pchar應該也是只有256字元吧?) 用widestring也可以呀?謝謝!!
yoyo12345
一般會員


發表:33
回覆:77
積分:22
註冊:2003-03-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-03 15:54:36 IP:61.220.xxx.xxx 未訂閱
唉呀~~所以我一開始就弄錯方向了 ------------------------ 我有一dll宣告如下 function aa(bb:pchar):integer;stdcall; ------------------------- 也就是說~~我dll不該宣告成pchar,才能放進更多字元 若是pchar應該不能這樣宣告吧 str:array[0..300] of char;
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-06 14:50:15 IP:61.155.xxx.xxx 未訂閱
这样使用pchar procedure TForm1.Button1Click(Sender: TObject); var pchr:pchar; i:integer; Mychr: array[0..300] of char; begin StrCopy(Mychr, 'sos_admin !'); pchr:=@Mychr; for i:=StrLen(Mychr) downto 0 do begin showmessage(pchr^); inc(pchr); end; end;
yoyo12345
一般會員


發表:33
回覆:77
積分:22
註冊:2003-03-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-08 17:18:32 IP:61.220.xxx.xxx 未訂閱
唉!!誤會一場 but還是感謝兩位大大的解說~~ 以上我的結論也是錯的,請不要參考~~
系統時間:2024-05-03 12:16:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!