C#调用windows api 函数GetShortPathName

  
其实我们的议题应该叫做 C# 如何直接调用 非托管代码 ,通常有 2 种方法:
1.  直接调用从 DLL 导出的函数。
2.  调用 COM 对象上的接口方法
我主要讨论从dll中导出函数,基本步骤如下:
1 .使用 C# 关键字 static extern 声明 方法。
2 DllImport属性附加到该方法。 DllImport属性允许您指定 包含该方法的 DLL 的名称
3.如果需要,为方法的参数和返回值指定自定义封送处理信息,这将重写 .NET Framework 的 默认封送处理。
好,我们开始
1.首先我们查询MSDN找到GetShortPathName的定义
The GetShortPathName function retrieves the short path form of the specified path.
DWORD GetShortPathName(
  LPCTSTR lpszLongPath ,
  LPTSTR lpszShortPath ,
  DWORD cchBuffer
);
 public class CShortPath
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern int GetShortPathName(
            [MarshalAs(UnmanagedType.LPTStr)]string path,
            [MarshalAs(UnmanagedType.LPTStr)]StringBuilder short_path,
            int short_len
            );

        public static string GetShortPath(string name)
        {
            int lenght = 0;

            lenght = GetShortPathName(name, null, 0);
            if (lenght == 0)
            {
                //new nghmp.GenericErrorForm("Can't get short path name", name, true);
                return name;
            }
            StringBuilder short_name = new StringBuilder(lenght);
            lenght = GetShortPathName(name, short_name, lenght);
            if (lenght == 0)
            {
                //new nghmp.GenericErrorForm("Can't get short path name", name, true);
                return name;
            }
            return short_name.ToString();
        }//GetShortPath
    }//class CShortPath


你可能感兴趣的:(C#,dll,winapi)