一个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定义,一个成功一个失败呢 
有了解的人,指点一下,谢谢了

解决方案 »

  1.   

    你把第2种方法在VB6中试一下,如果可以,那就是第2种方法在VB2005中定义的问题。
      

  2.   

    把刚刚.net 中的代码放到vb中返回的也是false,不知道是为什么
      

  3.   

    MoveFile不能跨盘操作,MSDN中有明确说明。
      

  4.   

    用GetLastError获得错误类型数值
    再用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)