全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2888
推到 Plurk!
推到 Facebook!

WritePrivateProfileString可用,GetPrivateProfileString卻不能用

答題得分者是:Stallion
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-16 23:55:46 IP:220.141.xxx.xxx 訂閱
<textarea name="code" class="delphi" rows="200" cols="1500"> Program IFSTest; function WritePrivateProfileString( lpAppName:pchar;lpKeyName:pchar;lpString:pchar;lpFileName:pchar): Longint; external 'WritePrivateProfileStringA@kernel32.dll stdcall'; function GetPrivateProfileString( lpAppName:pchar;lpKeyName:pchar;lpDefault:pchar;lpReturnedString:pchar; nSize: Longint;lpFileName:pchar ): Longint; external 'GetPrivateProfileStringA@kernel32.dll stdcall'; var i: Longint; s : string; Begin i := WritePrivateProfileString('section','key1','5678','.\abc.ini') // i = 0 error writeln(inttostr(i)); GetPrivateProfileString('section','key1','',s,256,'.\abc.ini'); writeln(s); End. </textarea>
幸運的是WritePrivateProfileString可以使用 但是GetPrivateProfileString 卻出現以下訊息:
[Runtime Error] : Exception: Access violation at address 77E7155D in module 'kernel32.dll'. Write of address 00000000 in 0 at 312
請知道的人教一下,謝謝!
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2007-08-16 23:58:19, 註解 排版‧
pceyes 重新編輯於 2007-08-17 12:24:36, 註解 無‧
pceyes 重新編輯於 2007-08-17 12:28:52, 註解 無‧
pceyes 重新編輯於 2007-08-17 12:32:30, 註解 無‧
pceyes 重新編輯於 2007-08-17 12:35:12, 註解 無‧
pceyes 重新編輯於 2007-08-17 12:36:20, 註解 無‧
pceyes 重新編輯於 2007-08-17 12:37:28, 註解 無‧
Stallion
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-17 00:28:28 IP:211.22.xxx.xxx 未訂閱
1.你可不可以把你的CODE整理一下!這樣沒人看得懂!
2.看了幾篇你的問題,發現你在呼叫WINAPI時都重新宣告原型,這在FORM的單元裡面是不需要的,在FORM的單元裡面內定就uses Windows(裡面包含了各API的原型以及一些常數與結構宣告)了,除非你的單元在呼叫WINAPI時該單元又沒有uses windows。
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-17 13:00:33 IP:220.141.xxx.xxx 訂閱
版主大大,實在抱歉,請容我解釋,
因為在測試
remobjects Pascal Script™ 3.0
網址 www.remobjects.com/page.asp
發現沒有shellexetue, inifiles可以使用, 但可以利用winapi的方式達成目的
突然發現自己好像在寫vb, 才知道寫delphi是一件多幸福的事, 因為winapi它都包好了
1.) 於是要先用google先以關鍵字找 "vb ini"
2.)用win32.hlp看它的宣告方式
3.)測試
4.)不行再上 ktop 請教
5.)有sense,再上網找答案
6.)查 source windows.pas, inifiles.pas....
...............

vb的宣告
Declare Function GetprivateprofileString Lib"Ker-nel"(ByVallpAppName As String,ByVallpKeyName As String,ByVallpDefault As String,ByVal lpRetrm-String As String,ByVal cbReturnString As Integer,ByVal Filename As String)As Integer

win32.hlp的宣告
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // points to section name
LPCTSTR lpKeyName, // points to key name
LPCTSTR lpDefault, // points to default string
LPTSTR lpReturnedString, // points to destination buffer
DWORD nSize, // size of destination buffer
LPCTSTR lpFileName // points to initialization filename
);

有關這段可能是問題關鍵, 可惜看不懂:
lpDefault

Windows NT: Windows NT does not modify the lpDefault string. This means that if the default string contains trailing blanks, the lpReturnedString and lpDefault strings will not match when compared using the lstrcmp function.
------
努力會更接近成功
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-17 13:23:58 IP:220.141.xxx.xxx 訂閱
<textarea cols="800" rows="200" class="delphi" name="code"> Program IFSTest; function WritePrivateProfileString(lpAppName:pchar;lpKeyName:pchar;lpString:pchar;lpFileName:pchar): Longint; external 'WritePrivateProfileStringA@kernel32.dll stdcall'; function GetPrivateProfileString(lpAppName:pchar;lpKeyName:pchar;lpDefault:pchar;lpReturnedString:pchar; nSize: Longint;lpFileName:pchar ): Longint; external 'GetPrivateProfileStringA@kernel32.dll stdcall'; var i: Longint; s : string; Begin i := WritePrivateProfileString('section','key1','9999','.\abc.ini') // i = 0 -> error writeln(inttostr(i)); SetLength(s,256); GetPrivateProfileString('section','key1','',s,256,'.\abc.ini'); writeln(s); End. </textarea> 可以了
關鍵在 SetLength(s,256); 256相當於 MAX_PATH 能否請教它定義在那裏? 謝謝大家的指導!
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2007-08-17 13:26:59, 註解 無‧
pceyes 重新編輯於 2007-08-17 13:27:47, 註解 無‧
Stallion
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-17 13:52:55 IP:211.22.xxx.xxx 未訂閱
這一篇不是已經告訴你了嗎!
系統時間:2017-10-19 8:10:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!