[转帖]C#如何调用非托管函数(二)-传递结构和类
在上一篇 c# 如何调用非托管函数 中介绍了调用非托管函数的简单方法,其中传递的都是简单的值类型,如uint等。本篇将介绍如何传递结构或类到非托管函数。
以系统函数 GetSystemTime 为例,以下分别演示了如何传递结构和类。
一 传递结构
参考MSDN可以知道他的定义为:
void WINAPI GetSystemTime(__out LPSYSTEMTIME lpSystemTime);
其中LPSYSTEMTIME 就是一个结构体:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME,
*PSYSTEMTIME;
注意这里只是一个特例,并不是所有的情况既可以定义成结构类型也可以定义成类类型,通常我们应遵循以下原则:
- 在非托管函数不要求任何间接寻址时使用按值传递的结构。
- 在非托管函数要求一级间接寻址时使用按引用传递或按类传递的结构。
- 在非托管函数要求二级间接寻址时使用按引用传递的类。
本文转自刘武作品
http://www.cnblogs.com/liuwu/archive/2009/09/26/1574327.html
参考:

参考文档:
[转帖]C#如何调用非托管函数(三)-实现回调函数
[转帖]ACTIVE OBJECT 模式
[转帖]C# const和static readonly有什么区别?
[转帖]C#如何实现DataGridView到DataGridView的拖拽
[转帖]C#如何调用非托管函数(一)
[转帖]FreeTextBox添加自定义按钮
[原创]递归读取DataTable加载TreeList控件
[转帖]C#如何调用非托管函数(三)-实现回调函数
[转帖]ACTIVE OBJECT 模式
[转帖]C# const和static readonly有什么区别?
[转帖]C#如何实现DataGridView到DataGridView的拖拽
[转帖]C#如何调用非托管函数(一)
[转帖]FreeTextBox添加自定义按钮
[原创]递归读取DataTable加载TreeList控件
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
