C# 调用 WinAPI 示例集锦
需积分: 10 160 浏览量
更新于2024-12-12
收藏 21KB TXT 举报
"C# API大全.txt 包含了C#中使用Platform Invoke技术调用Windows API的示例,这些示例位于C:\ProgramFiles\MicrosoftVisual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\PlatformInvoke\WinAPIs\CS目录下。文件涉及到的关键点包括DllImportAttribute的使用、CallingConvention的指定以及CharSet的选择。"
在C#编程中,与本地DLL进行交互是通过.NET框架提供的Platform Invoke (P/Invoke)服务实现的。这个服务允许C#代码调用非托管代码,如Windows API函数。以下是对关键知识点的详细解释:
1. DllImportAttribute:这是C#中的一个特性(attribute),用于标记静态方法,指示该方法是平台调用接口。它指定了要导入的动态链接库(DLL)名称,例如`[DllImport("user32.dll")]`,并可以包含其他属性来配置调用约定和字符串编码。
2. CallingConvention:调用约定决定了参数如何传递给被调用的函数。常见的调用约定有:
- `CallingConvention.Cdecl`:这是C语言的调用约定,参数按逆序传递,由调用者清理堆栈。
- `CallingConvention.StdCall`:这是大多数Windows API函数使用的调用约定,参数按正序传递,由被调用者清理堆栈。
3. CharSet:这个属性决定了字符串参数如何编码。主要有以下几种选择:
- `CharSet.Ansi`:使用ANSI编码,即基于当前系统代码页的字符集。
- `CharSet.Unicode`:使用Unicode编码,通常是UTF-16LE。
- `CharSet.Auto`:自动选择编码,根据目标操作系统(Windows NT系列使用Unicode,Windows 9x系列使用Ansi)。
4. EntryPoint:当DLL函数的名称在.NET中与默认规则不匹配时,可以使用此属性指定函数的实际入口点名称。例如,有些API函数在Unicode版本和Ansi版本中可能有不同的名称,如`GetVersionEx`和`GetVersionExW`。
5. ExactSpelling:如果设置为`true`,则要求函数名在DLL中必须完全匹配,不允许.NET框架自动添加后缀(如A或W)来区分Unicode和Ansi版本。
在实际开发中,正确使用这些属性对于成功调用Windows API至关重要。例如,如果你需要调用`MessageBox`函数,你可能会这样编写代码:
```csharp
using System.Runtime.InteropServices;
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBoxW(IntPtr hWnd, string lpText, string lpCaption, uint uType);
```
以上就是对C# API调用Windows API的关键知识点的详细解释,包括如何使用DllImportAttribute、指定调用约定和处理字符串编码。正确理解和应用这些概念将有助于你在C#中有效地利用非托管资源。
2020-01-03 上传
2009-08-02 上传
2009-04-10 上传
2008-11-16 上传
2004-06-22 上传
2010-11-29 上传
2011-03-18 上传
2008-02-14 上传
hezhiyonging
- 粉丝: 12
- 资源: 124
最新资源
- not-so-simple
- hostFolder
- hackernews-clone:Hackernews使用React,GraphQL,Prisma和Postgres进行克隆
- fastapi-celery-example
- 虚幻4自由视角镜头 Camera.7z
- usersList
- Social-iNet:具有boostrap 4和javascript的简单SPA
- Java垃圾收集必备手册.rar
- CareerPath:个人研究的此回购角色有关开发职业或其他任何问题的提示
- TotalControl:一款带手控的安卓游戏
- JavaAssessments
- Proyecto-Hotel:Proyecto#1(酒店)
- collection_exercises
- 【WordPress插件】2022年最新版完整功能demo+插件14 Mar.zip
- sequelize-search-builder:极简库,用于解析搜索请求以序列化查询
- Actions:作证行动