其实我们的议题应该叫做
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