一直在用cport控制項,也用了它帶的乙個列舉電腦串列埠的函式enumcomports(),原**如下:
procedure enumcomports(ports: tstrings);var keyhandle: hkey;
errcode, index: integer;
valuename, data: string;
valuelen, datalen, valuetype: dword;
tmpports: tstringlist;
begin
errcode := regopenkeyex(
hkey_local_machine,
'hardware\devicemap\serialcomm',
0,key_read,
keyhandle);
if errcode <> error_success then
begin
//raise ecomport.create(cerror_regerror, errcode);
exit;
end;
tmpports := tstringlist.create;
tryindex := 0;
repeat
valuelen := 256;
datalen := 256;
setlength(valuename, valuelen);
setlength(data, datalen);
errcode := regenumvalue(
keyhandle,
index,
pchar(valuename),
cardinal(valuelen),
valuelen,
nil,
@valuetype,
pbyte(pchar(data)),
@datalen);
if errcode = error_success then
begin
setlength(data, datalen - 1);
tmpports.add(data);
inc(index);
endelse
if errcode <> error_no_more_items then break;
//raise ecomport.create(cerror_regerror, errcode);
until (errcode <> error_success) ;
tmpports.sort;
ports.assign(tmpports);
finally
regclosekey(keyhandle);
tmpports.free;
end;
end;
原來是用delphi7一直正常,現在用xe2,出了小問題。
當把列舉出來的ports分配到combobox時,一切顯示正常
但是,當把串口號變更值儲存到登錄檔或ini檔案後,下次啟動程式時,沒有儲存變更的串口號,這是怎麼回事呢?排除了各種錯誤後,檢測這個函式檢出的串列埠,發現串口號名稱竟然變長了,比如com1本來為4,在ports中儲存的這個值長度為10,但是在combobox中顯示時,顯示是正常的,杯具的是,我在程式啟動時,是要檢測電腦串列埠,然後根據儲存登錄檔中的串號和ports比較,如果有這個串口號,剛不變,否則就設定預設值。這樣每次啟動程式時,串列埠都恢復到預設值,因為"com1" <> " com1 ",而且可能"
com1 "多餘的字元不僅有空格,可能還有不可顯示字元。用trim解決不了問題。應當是在這個地方修正
tmpports.add(data);修改成:
tmpports.add(pchar(data));
ok,我想這個主要是字串的問題,ansistring和uncodestring
關於Jsoup的乙個小問題
利用jsoup可以實現對網頁資訊進行有效解析和提取,例如有網頁內容如下 hello,jsoup jsoup的官方 利用jsoup提取標籤的內容,如下 document doc null trycatch ioexception ioe 提取標籤的內容 string strtitle doc.sele...
乙個關於選擇的小問題
以前看過這樣乙個問題 乙個人參加有獎答題,主持人給出了a b c三個選項。這個不知道問題的答案,就隨便選了乙個選項。然後主持人排除了剩下兩個答案中的乙個,告訴這個人有一次改變自己選項的機會。請問 這時候這個人該不該改變自己的選項?剛看到這個問題,我的第一反映是完全沒必要,因為既然排除了乙個錯誤選項,...
關於指標的乙個小問題
任務 c primer 4th 習題5.18 編寫程式定義乙個vector物件,其每個元素都是指向string型別的指標,讀取該vector物件,輸出每個string的內容及其相應的長度。自己的方法 string s string sarr 10 vector內的每個元素都是指向string型別的指...