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 {…} }
}
 
说明:     
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 修饰符。
posted @ 2020-03-17 11:10  SusieSnail_SUN  阅读(218)  评论(0编辑  收藏  举报