我爱Aspx >> Asp.Net >> 在 C# 中通过 P/Invoke 调用Win32 DLL幸运的是,要让 P/Invoke 调用工作只需要让外围设备理解调用约定即可。通常,从默认值 CallingConvention.Winapi 开始是最好的选择。然后,在 C 运行时 DLL 函数和少数函数中,可能需要将约定更改为 CallingConvention.Cdecl。
数据封送处理
数据封送处理是 P/Invoke 具有挑战性的方面。当在托管和非托管代码之间传递数据时,CLR 遵循许多规则,很少有开发人员会经常遇到它们直至可将这些规则记住。除非您是一名类库开发人员,否则在通常情况下没有必要掌握其细节。为了最有效地在 CLR 上使用 P/Invoke,即使只偶尔需要 interop 的应用程序开发人员仍然应该理解数据封送处理的一些基础知识。
在本月专栏的剩余部分中,我将讨论简单数字和字符串数据的数据封送处理。我将从最基本的数字数据封送处理开始,然后介绍简单的指针封送处理和字符串封送处理。
封送数字和逻辑标量
Windows OS 大部分是用 C 编写的。因此,Windows API 所用到的数据类型要么是 C 类型,要么是通过类型定义或宏定义重新标记的 C 类型。让我们看看没有指针的数据封送处理。简单起见,首先重点讨论的是数字和布尔值。
当通过值向 Windows API 函数传递参数时,需要知道以下问题的答案:
| • | 数据从根本上讲是整型的还是浮点型的? |
| • | 如果数据是整型的,则它是有符号的还是无符号的? |
| • | 如果数据是整型的,则它的位数是多少? |
| • | 如果数据是浮点型的,则它是单精度的还是双精度的? |
有时答案很明显,但有时却不明显。Windows API 以各种方式重新定义了基本的 C 数据类型。图 2 列出了 C 和 Win32 的一些公共数据类型及其规范,以及一个具有匹配规范的公共语言运行库类型。
Ҷƪл˵?
C# 泛型简介[05-20]
《Effective C#》 翻译札记[05-20]
C#实现WEB服务器[05-20]
C#中时间差的计算[05-20]
C#四种Eval测试结果:不要用Code..[05-20]
通常C#面试题[05-20]
用C#与XML创建动态分层菜单[05-20]
C#数值结果表(格式化字符串)[05-20]
用浏览器来接收C# 的程序返回的时..[05-20]
使用C# 编写扩展存储过程[05-20]
C# 泛型简介[05-20]
《Effective C#》 翻译札记[05-20]
Visual Studio 2005 新功能、新特..[05-20]
对mssql出现选定的用户拥有对象而..[05-20]
常用正则表达式[05-20]
将 Web 项目从 VS2002/2003 转换..[05-20]
Visual Studio 术语表[K-Z][05-20]
使用 Visual Studio 2005 Team S..[05-20]
常用CHM帮助文档集锦下载[2007-0..[05-20]
常用.NET工具下载(包括.NET可再发..[05-20]