pb7:
FUNCTION Long CreateFile(String lpFileName, Long dwDesiredAccess, Long dwShareMode, Long lpSecurityAttributes, Long dwCreationDisposition, Long dwFlagsAndAttributes, Long hTemplateFile) LIBRARY "kernel32" ALIAS FOR "CreateFileA"
FUNCTION Long CloseHandle(Long hObject) LIBRARY "kernel32"
FUNCTION boolean ReadFile(long fhand, ref string lpbuffer, long numbyte, ref long bytesread, long lpover) LIBRARY "kernel32.dll"
Long SetFilePointer(long fhand, ulong distancetomove, ulong distincetomovehigh, ulong move) LIBRARY "kernel32.dll"
FUNCTION Long GetLastError() LIBRARY "kernel32.dll"
所有變數宣告好:
ll_hDevice = CreateFile("\\.\PHYSICALDRIVE3" , &
GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0)
If ll_hDevice <> INVALID_HANDLE_VALUE Then
ll_fileposition= SetFilePointer(ll_hDevice, 512*ll_sectors, 0, FILE_Begin )
ll_error=GetLastError()
If ll_error <> 0 Then
messagebox('hint','SetFilePointer failed, ErrorNo: '+ string(ll_error))
End If
....
End If
一切正常。
PB12:
//為視窗宣告外部函式
FUNCTION Long CreateFile(String lpFileName, Long dwDesiredAccess, Long dwShareMode, Long lpSecurityAttributes, Long dwCreationDisposition, Long dwFlagsAndAttributes, Long hTemplateFile) LIBRARY "kernel32" ALIAS FOR "CreateFileA;Ansi"
FUNCTION Long CloseHandle(Long hObject) LIBRARY "kernel32"
FUNCTION boolean ReadFile(long fhand, ref string lpbuffer, long numbyte, ref long bytesread, long lpover) LIBRARY "kernel32.dll" alias for "ReadFile;Ansi"
FUNCTION ULong SetFilePointer(long fhand, long distancetomove, long distincetomovehigh, long move) LIBRARY "kernel32.dll"
FUNCTION Long GetLastError() LIBRARY "kernel32.dll"
程式一樣,
在設定指標大約比如600000個扇區時,PB7正常,而在pb 12中報 setfilepointer 錯誤, 錯誤號126.
有點暈,不知道什么問題? 字符集的差別?
uj5u.com熱心網友回復:
FUNCTION ULong SetFilePointer(long fhand, long distancetomove, long distincetomovehigh, long move) LIBRARY "kernel32.dll" alias for "SetFilePointer;Ansi"uj5u.com熱心網友回復:
FUNCTION Long CreateFile(String lpFileName, Long dwDesiredAccess, Long dwShareMode, Long lpSecurityAttributes, Long dwCreationDisposition, Long dwFlagsAndAttributes, Long hTemplateFile) LIBRARY "kernel32" ALIAS FOR "CreateFileW"FUNCTION Long CloseHandle(Long hObject) LIBRARY "kernel32"
FUNCTION boolean ReadFile(long fhand, ref string lpbuffer, long numbyte, ref long bytesread, long lpover) LIBRARY "kernel32.dll" ALIAS FOR "ReadFileW"
uj5u.com熱心網友回復:
由于字符集的問題,在PB10以后宣告外部變數要加上ansi,看樓主只有1個函式是按照這個約定宣告的。uj5u.com熱心網友回復:
PB10以下版本的程式,字串使用的ANSI編碼,pb10或以上版本,使用的是Unicode編碼,所以在API函式定義上,會有些出入.大部分在引數或回傳值中使用了字串的Windows API函式,都提供了兩個版本的API,一個是支持ANSI的,一般在函式后面加個A作為標記,一個是支持Unicode的,一般在函式后面加W(WideChar)作為標記.如GetWindowTextA和GetWindowTextW,所以在pb9時,定義API函式一般使用的是ANSI版本(因為PB9使用的是ANSI編碼),如果是升級到PB10或以后版本,則可以把API函式定義為使用Unicode版本即可,而不是使用PB程式直接升級的那樣,繼續采用Ansi版本。如果在PB10及以上還需要定義Ansi版本的函式,則需要定義函式時宣告;Ansi
綜上分析,在pb10以下版本定義了如下一個API后
Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"
在升級到PB10及以上版本時,可以這樣修改
(1)
Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL" alias for "GetTextExtentPoint32A;Ansi"
(2)
Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL" alias for "GetTextExtentPoint32W"
(3)改函式名
Function boolean GetTextExtentPoint32W(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"
uj5u.com熱心網友回復:
感謝各位對我問題的回答,但是pb 12中
FUNCTION ULong SetFilePointer(long fhand, long distancetomove, long distincetomovehigh, long move) LIBRARY "kernel32.dll" alias for "SetFilePointer;Ansi"
之后,問題依舊。
在設定到 100000號左右扇區位置時,OK,沒有問題。但是如果設定到500000號左右扇區位置時,就報錯。
讀取的是U盤,2G空間。按照物理設備讀取的。奇怪。大家再幫我想想。
uj5u.com熱心網友回復:
終于找到困擾了我好幾天的問題了,估計我也是遇到了字符問題,定義的函式在8、9版本都正常,但是昨天升級到了10之后,就怎么都不執行了,先感謝4樓的回復,等上班了試試看否能解決我的問題uj5u.com熱心網友回復:
相對而言,還是新版的應用好一些uj5u.com熱心網友回復:
四年沒有PB了,以為PB該退出歷史舞臺,沒想到有人使用,還有新版出來。uj5u.com熱心網友回復:
你是人才
uj5u.com熱心網友回復:
我呼叫的時候 CreateFile 成功,但是 ReadFile 始終不行 getlasterror 都是6。 能幫幫忙嗎?uj5u.com熱心網友回復:
找到原因了...uj5u.com熱心網友回復:
關注,我也遇到類似的問題了轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/57123.html
標籤:API 調用
上一篇:PB Webservice + IIS 從資料庫中提取資料項,專案值是代碼怎么辦。如性別專案值是1,怎么把‘1’換成‘男’。大家都是用什么辦法。
下一篇:PADS PCB板設計
