编程过程中,一般c#调用非托管的代码有两种方式:
1.直接调用从DLL中导出的函数。
2.调用COM对象上的接口方法。
本文说明第1种方式,基本步骤如下:
1.使用关键字static,extern声明需要导出的函数。
2.把DllImport 属性附加到函数上。
3.掌握常用的数据类型传递的对应关系。
4.如果需要,为函数的参数和返回值指定自定义数据封送处理信息,这将重写.net framework默认的封送处理。
简单举例如下:
原型:
DWORD GetShortPathName(
LPCTSTR lpszLongPath,
LPTSTR lpszShortPath,
DWORD cchBuffer
);
c#函数声明如下:
[DllImport(“kernel32.dll”)]
public static extern int GetShortPathNam(
string path,
StringBuilder shortPath,
int shortPathLength
)
[DllImport(“kernel32.dll”, CharSet = CharSet.Auto,EntryPoint=“getShort”))]
public static extern int GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)] string path,
[MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath,
int shortPathLength