c# dllimport
用于学习记录
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息
ASP.NET中要使用DllImport的,必须在先“using System.Runtime.InteropServices;”
DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称
DllImport的定义如下:
[AttributeUsage(AttributeTargets.Method)]
public class DllImportAttribute: System.Attribute
{
public DllImportAttribute(string dllName) //定位参数为dllName
{
…
}
public CallingConvention CallingConvention; //入口点调用约定
public CharSet CharSet; //入口点采用的字符接
public string EntryPoint; //入口点名称
public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认false
public bool PreserveSig; //方法的签名是被保留还是被转换
public bool SetLastError; //FindLastError方法的返回值保存在这里
public string Value { get {…} }
}
public CallingConvention CallingConvention; //入口点调用约定
public CharSet CharSet; //入口点采用的字符接
public string EntryPoint; //入口点名称
public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认false
public bool PreserveSig; //方法的签名是被保留还是被转换
public bool SetLastError; //FindLastError方法的返回值保存在这里
public string Value { get {…} }
}
说明:
1、DllImport只能放置在方法声明上;
2、DllImport具有单个定位参数:指定包含被导入方法的 dll 名称的dllName 参数;
3、DllImport具有五个命名参数:
a、CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值CallingConvention.Winapi;
b、CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值CharSet.Auto;
c、EntryPoint 参数给出 dll 中入口点的名称。如果未指定EntryPoint,则使用方法本身的名称。
d、ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。
e、PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT返回值和该返回值的一个名为 retval的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值true。
f、SetLastError 参数指示方法是否保留Win32"上一错误"。如果未指定 SetLastError,则使用默认值 false。
4、它是一次性属性类;
5、此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。
1、DllImport只能放置在方法声明上;
2、DllImport具有单个定位参数:指定包含被导入方法的 dll 名称的dllName 参数;
3、DllImport具有五个命名参数:
a、CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值CallingConvention.Winapi;
b、CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值CharSet.Auto;
c、EntryPoint 参数给出 dll 中入口点的名称。如果未指定EntryPoint,则使用方法本身的名称。
d、ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。
e、PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT返回值和该返回值的一个名为 retval的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值true。
f、SetLastError 参数指示方法是否保留Win32"上一错误"。如果未指定 SetLastError,则使用默认值 false。
4、它是一次性属性类;
5、此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。