C#调用API函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 04:01:17
在C#里调用函数似乎和C++不同,比如
CreateFile(
LPCTSTR lpFileName, //指向文件名的指针
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
)
中,参数dwDesiredAccess 的内容在C++里可以直接写成GENERIC_READ 这样
而在C#里只能先到头文件找到GENERIC_READ 对应的数字,把他变成对应的数字才能调用成功
不能象C++那样直接使用吗

C#中不能直接使用类似GENERIC_READ的符号。
因为微软在发布操作系统windows的API,SDK时,是用的C和C++形式。所以我们能在头文件中看到GENERIC_READ这个宏。C#用的是.NET API,和.NET SDK,没有包括绝大多数Win32 API的常数(宏)定义。C#发明出来的很大的一个目的就是要使问题简单化,而且它是建立在.NET而非Win32平台上的,所以他们更建议直接使用.NET API,而不是Win32 API,所以C#没有提供和C++一样强大的,对Win32 API的支持。

也可以直接调用系统为你提供的相关类的属性吧

XXX.XXX 就可以了

虽然调用方式感觉不太一样,但是本质是相同的.
GENERIC_READ 这种方式就是给一个数字重命名了,但是系统已经预定义好了.
c#里也可以定义一个static变量模仿这样的使用方法

c#里用dllimport将函数引入之后,使用时和普通c#没什么区别,只是当参数和返回值和c#标准类型对不上时就要自己定义类型了.