一个api的问题:
以MoveFile这个api的使用为例(当然这个功能可以直接用.net类库中的方法实现,但我只是想了解api的使用,所以以它为例描述一下我遇到的问题):
我写了两种定义:
1) <DllImport("KERNEL32", EntryPoint:="MoveFileW",SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Function MoveFile( _
ByVal src As String, _
ByVal dst As String) _
As Boolean
End Function
当我进行调用后
Dim RetVal As Boolean = MoveFile("d:\Testd.txt", "e:\Teste.txt")
RetVal 返回了true,成功的执行了操作。
2)Public Declare Function MoveFile Lib "KERNEL32.dll" _
Alias "MoveFileW" (ByVal src As String, _
ByVal dst As String) As Boolean
当我进行调用后
Dim RetVal As Boolean = MoveFile("d:\Testd.txt", "e:\Teste.txt")
RetVal 返回了false,操作失败。 我想问得就是,为什么两种vb2005都支持的api定义,一个成功一个失败呢
有了解的人,指点一下,谢谢了
以MoveFile这个api的使用为例(当然这个功能可以直接用.net类库中的方法实现,但我只是想了解api的使用,所以以它为例描述一下我遇到的问题):
我写了两种定义:
1) <DllImport("KERNEL32", EntryPoint:="MoveFileW",SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Function MoveFile( _
ByVal src As String, _
ByVal dst As String) _
As Boolean
End Function
当我进行调用后
Dim RetVal As Boolean = MoveFile("d:\Testd.txt", "e:\Teste.txt")
RetVal 返回了true,成功的执行了操作。
2)Public Declare Function MoveFile Lib "KERNEL32.dll" _
Alias "MoveFileW" (ByVal src As String, _
ByVal dst As String) As Boolean
当我进行调用后
Dim RetVal As Boolean = MoveFile("d:\Testd.txt", "e:\Teste.txt")
RetVal 返回了false,操作失败。 我想问得就是,为什么两种vb2005都支持的api定义,一个成功一个失败呢
有了解的人,指点一下,谢谢了
再用FormatMessage获得错误类型的中文解释看看是哪里出错了还有哦,如果你的文件是要从一个卷(盘)复制到另外一个卷(盘),则MoveFile很有可能会出错的
试试用MoveFileEx看看Const MOVEFILE_COPY_ALLOWED = &H2
Private Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long
Debug.Print MoveFileEx("D:\Testd.txt", "E:\Testd.txt", MOVEFILE_COPY_ALLOWED)