网站首页站长博客下载中心域名交易站长论坛域名主机免费电邮免费域名中文排行排名查询站长书库书籍教程下载
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
学院首页 网络编程 网页设计 图形图象 数 据 库 服 务 器 网络媒体 网络安全 个人专栏 站长CLUB 业界新闻 信息公告
 当前位置:首页 >> 网络编程 >> NET专区 >> 正文
公告通知
返回上级列表
资料搜索
相关文章
用户自定义控件的应用
c#.net常用函数和方法集
在VB中使用水晶报表的一种简易编
C#调用父类的父类的方法
浏览.NET Framework 2.0 类型库中
为.Text Blog 添加 计数器
编程实现邮件地址有效性检测 
VB/VB.NET/C#导出到Excel的方法
c#高性能在WEB端产生验证图片
用System.Web.Caching.Cache保存
C#中调用Windows API的要点
[ 来源:中国站长学院 | 作者:风未起时 | 时间:2005-6-27 8:37:21 | 浏览:人次 ]
收藏到新浪ViVi 收藏到365KEY 收藏到我摘  字号选择〖    〗/ 双击滚屏 单击停止  
二、参数类型:

  1、数值型直接用对应的就可。(DWORD -> int , WORD -> Int16)
  2、API中字符串指针类型 -> .net中string
  3、API中句柄 (dWord)  -> .net中IntPtr
  4、API中结构   -> .net中结构或者类。注意这种情况下,要先用StructLayout特性限定声明结构或类

  公共语言运行库利用StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列。如果要将类传递给需要指定布局的非托管代码,则显式控制类布局是重要的。它的构造函数中用LayoutKind值初始化 StructLayoutAttribute 类的新实例。 LayoutKind.Sequential 用于强制将成员按其出现的顺序进行顺序布局。

  LayoutKind.Explicit 用于控制每个数据成员的精确位置。利用 Explicit, 每个成员必须使用 FieldOffsetAttribute 指示此字段在类型中的位置。如:

[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
  public class MySystemTime
  {
  [FieldOffset(0)]public ushort wYear;
  [FieldOffset(2)]public ushort wMonth;
  [FieldOffset(4)]public ushort wDayOfWeek;
  [FieldOffset(6)]public ushort wDay;
  [FieldOffset(8)]public ushort wHour;
  [FieldOffset(10)]public ushort wMinute;
  [FieldOffset(12)]public ushort wSecond;
  [FieldOffset(14)]public ushort wMilliseconds;
  }
  下面是针对API中OSVERSIONINFO结构,在.net中定义对应类或结构的例子:
  /**********************************************
  * API中定义原结构声明
  * OSVERSIONINFOA STRUCT
  *  dwOSVersionInfoSize   DWORD      ?
  *  dwMajorVersion        DWORD      ?
  *  dwMinorVersion        DWORD      ?
  *  dwBuildNumber         DWORD      ?
  *  dwPlatformId          DWORD      ?
  *  szCSDVersion          BYTE 128 dup (?)
  * OSVERSIONINFOA ENDS
  *
  * OSVERSIONINFO  equ  <OSVERSIONINFOA>
  *********************************************/

//.net中声明为类
  [ StructLayout( LayoutKind.Sequential )]  
  public class OSVersionInfo
  {  
  public int OSVersionInfoSize;
  public int majorVersion;
  public int minorVersion;
  public int buildNumber;
  public int platformId;

  [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]   
  public String versionString;
  }
  //或者
  //.net中声明为结构
  [ StructLayout( LayoutKind.Sequential )] 
  public struct OSVersionInfo2
  {
  public int OSVersionInfoSize;
  public int majorVersion;
  public int minorVersion;
  public int buildNumber;
  public int platformId;

本新闻共3页,当前在第2页  1  2  3  


[发送给好友]  [打印本页]  [关闭窗口]  [返回顶部]   转载请注明来源:http://edu.chinaz.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
栏目编辑: 设计风 责任编辑: 设计风
原始作者: 风未起时 录入时间: 2005-6-27 8:37:21
信息来源: 中国站长学院 投稿信箱: Edu#chinaz.com
设为首页 - 加入收藏 - 关于我们 - 广告服务 - 版权申明 - 友情链接 - 联系方式 - 总编信箱 - 会员投稿