返回值:装载到lpBuffer中的字符数量(排除空中止字符)。如缓冲区的长度不足以容下完整的路径,则返回值就是要求的缓冲区大小。零表示失败。lpBuffer为返回的路径名

解决方案 »

  1.   

    楼上已经解释了。
    我给了一个.net framework中的解决方案:
    System.IO.Path.GetFullPath("QQ.exe");
    和API一样的。
      

  2.   

    lpBuffer为返回的路径名如何获得lpBuffer的参数,让它输出来呢 ?
    不懂 !
      

  3.   

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern int GetFullPathName (
        [MarshalAs(UnmanagedType.LPTStr)]
          string lpFileName,
          int nBufferLength,
        [MarshalAs(UnmanagedType.LPTStr)]
          StringBuilder lpBuffer,
        [MarshalAs(UnmanagedType.LPTStr)]
          string lpFilePart
        );
    就是说,不管是用于输入还是输出的字符串缓冲区,都封送成UnmanagedType.LPTStr;
    但在托管程序中,string 类型是常量型的,要是更改了它的缓冲区会破坏托管堆。
    StringBuilder 类型就是被设计为用作缓冲区的,用它来代替字符串。
    使用时要这样:
    StringBuilder sb = new StringBuilder(80); // 缓冲区大小
    int ret = GetFullPathName(...); // 我省略不写了。
    string s =  sb.ToString();
    还有一点就是 CharSet = CharSet.Auto
    这个是为了在NT和9X上都正确处理UNICODE和ANSI字符串而设置的。
    如果你的函数名和被调名一样,可以不设置EntryPoint属性