通过调用CreateFile和ReadFile等API函数说明此问题,代码参考MSDN:
http://msdn2.microsoft.com/zh-cn/library/2d9wy99d(vs.80).aspx
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceApiTest
...{
classFileReader
...{
constuintGENERIC_READ=0x80000000;
constuintOPEN_EXISTING=3;
System.IntPtrhandle;
[System.Runtime.InteropServices.DllImport("kernel32",SetLastError=true)]
staticexternunsafeSystem.IntPtrCreateFile
(
stringFileName,//filename
uintDesiredAccess,//accessmode
uintShareMode,//sharemode
uintSecurityAttributes,//SecurityAttributes
uintCreationDisposition,//howtocreate
uintFlagsAndAttributes,//fileattributes
inthTemplateFile//handletotemplatefile
);
[System.Runtime.InteropServices.DllImport("kernel32",SetLastError=true)]
staticexternunsafeboolReadFile
(
System.IntPtrhFile,//handletofile
void*pBuffer,//databuffer
intNumberOfBytesToRead,//numberofbytestoread
int*pNumberOfBytesRead,//numberofbytesread
intOverlapped//overlappedbuffer
);
[System.Runtime.InteropServices.DllImport("kernel32",SetLastError=true)]
staticexternunsafeboolCloseHandle
(
System.IntPtrhObject//handletoobject
);
publicboolOpen(stringFileName)
...{
//opentheexistingfileforreading
handle=CreateFile
(
FileName,
GENERIC_READ,
0,
0,
OPEN_EXISTING,
0,
0
);
if(handle!=System.IntPtr.Zero)
...{
returntrue;
}
else
...{
returnfalse;
}
}
publicunsafeintRead(byte[]buffer,intindex,intcount)
...{
intn=0;
fixed(byte*p=buffer)
...{
if(!ReadFile(handle,p+index,count,&n,0))
...{
return0;
}
}
returnn;
}
publicboolClose()
...{
returnCloseHandle(handle);
}
}
classProgram
...{
staticintMain(string[]args)
...{
if(args.Length!=1)
...{
System.Console.WriteLine("Usage:ReadFile<FileName>");
return1;
}
if(!System.IO.File.Exists(args[0]))
...{
System.Console.WriteLine("File"+args[0]+"notfound.");
return1;
}
byte[]buffer=newbyte[128];
FileReaderfr=newFileReader();
if(fr.Open(args[0]))
...{
//AssumethatanASCIIfileisbeingread.
System.Text.ASCIIEncodingEncoding=newSystem.Text.ASCIIEncoding();
intbytesRead;
do
...{
bytesRead=fr.Read(buffer,0,buffer.Length);
stringcontent=Encoding.GetString(buffer,0,bytesRead);
System.Console.Write("{0}",content);
}
while(bytesRead>0);
fr.Close();
return0;
}
else
...{
System.Console.WriteLine("Failedtoopenrequestedfile");
return1;
}
}
}
}
特别要注意的是,由于代码中用到了unsafe代码,因此,编译的时候需要在项目属性中勾选允许编译Unsafe的选项:
否则会报:
Unsafe code may only appear if compiling with /unsafe
的错误。
分享到:
相关推荐
在本文中,我们将介绍如何在 C# 中调用 API 函数,并提供了一些实际示例代码。 一、什么是 API 函数? API(Application Programming Interface,应用程序编程接口)是一组预定义的函数或方法,用于实现不同应用...
本文将深入探讨如何使用C#调用API来修改系统时间,这对于理解和掌握系统级编程概念至关重要。 首先,我们需要理解API(Application Programming Interface)的概念。API是一组预定义的函数、类、对象和接口,它们...
总的来说,C#调用WLANAPI连接到WiFi涉及了P/Invoke、系统API调用、错误处理等多个知识点,理解并应用这些概念可以帮助你实现对Windows系统WiFi连接的控制。在实际开发中,确保对每个API函数的使用都有充分的理解,并...
5. 示例应用:下面是一个简单的示例,展示了如何使用C#调用`MessageBox`函数: ```csharp using System; using System.Runtime.InteropServices; class Program { [DllImport("user32.dll", CharSet = CharSet....
一个在HTML中使用Javascript的window.external调用C#内函数的示例程序。该方法可应用于网页程序开发中的网页-程序沟通,例如用C#的IHTMLWindow2.execScript替换HTML默认Javascript方法使其直接与C#传参、通讯。
本篇文章将详细介绍如何使用C#来封装这些API函数,并提供一个简单的示例类,以展示如何使用这些封装好的方法来操作INI文件。 #### 三、INI文件结构 一个典型的INI文件通常包含多个段落(Section),每个段落中又...
1. **导入必要的命名空间**:在调用API函数前,首先需要导入`System.Runtime.InteropServices`命名空间,这是C#调用API函数的基石,提供了一系列必要的类和方法,如`DllImport`属性,用于指定要调用的DLL文件位置。...
本示例将通过VS2013环境,探讨如何在C#中实现和应用回调函数。 首先,我们需要理解回调函数的基本概念。回调函数本质上是一个在其他函数完成其工作后被调用的函数。在C#中,我们通常使用委托(Delegate)来实现回调...
本示例展示了如何在C#和C++之间实现互操作性,即C#调用C++编写的动态链接库(DLL)函数,同时C++也能调用C#的方法。这主要依赖于.NET框架提供的互操作特性,如C++/CLI(C++的.NET版本)和P/Invoke(Platform Invoke...
C#调用DLL(动态链接库)的示例就是这样的一个场景,它允许C#代码利用C++编写的底层库,从而结合了C#的易用性和C++的高效性。 在C++中创建DLL文件通常涉及以下步骤: 1. 定义导出函数:在C++源文件中,使用`__...
3. **示例代码**:提供API函数的使用示例,帮助开发者理解如何在C#中正确调用。 4. **API文档链接**:可能直接链接到官方文档或其他权威资源,提供更详细的API信息。 5. **错误处理**:指导开发者如何处理可能出现...
总的来说,通过使用C#调用API函数和管理非托管资源,我们可以实现更底层的功能,如屏幕捕获。理解这个过程对于开发涉及系统级操作的应用程序至关重要。在实际项目中,可能还需要考虑错误处理、多线程安全等因素,以...
#### 三、C#中调用API示例 在C#中使用API通常涉及结构体、类型转换、安全/不安全代码等概念。下面通过一个简单的例子来展示如何在C#中调用API。 ##### 实现一个简单的MessageBox 1. **创建项目**:在Visual ...
C# 不调用API函数实现INI读取 在本节中,我们将探讨如何在C#中不调用API函数实现INI文件的读取和写入操作。 INI文件是一种常用的配置文件格式,广泛应用于各种软件和系统中。传统上,读取和写入INI文件需要使用...
通过以上示例可以看出,在C#中调用Windows API函数可以非常灵活地控制应用程序的行为,并且能够实现许多.NET框架本身不支持的功能。然而,需要注意的是,在使用这些API函数时必须确保对它们的正确性和安全性有足够的...
首先,为了在C#中调用HALCON引擎,你需要安装HALCON的.NET接口。这个接口提供了C#开发者所需的所有类和方法,以便在代码中直接操作HALCON的核心功能。确保你的HALCON安装包含.NET组件,并且已正确配置。 在C#中使用...
总结来说,C#调用API涉及到的关键点有P/Invoke机制、`DllImport`属性、`extern`关键字、结构体布局以及API函数的参数处理。通过这些知识点,开发者可以在C#中轻松地调用各种系统级功能或第三方库的功能。
### 实现C#调用MATLAB函数的知识点详解 #### 一、背景介绍 随着.NET框架的广泛应用,很多开发者在构建复杂应用时可能会遇到需要利用MATLAB的强大计算能力的情况。MATLAB以其强大的数学处理功能而闻名,特别是在科学...
### C#调用API控制禁用键盘鼠标及锁屏功能详解 #### 一、引言 在特定的应用场景下,例如开发系统维护工具或者安全控制软件时,可能需要临时禁用用户的键盘和鼠标输入,或者锁定工作台来防止未经授权的操作。本文将...