win32 api

Microsoft在StrSafe.h定义了新的安全字符串函数

为了防止缓冲区溢出,在将一个可写缓冲区作为参数传递时,必须传递它的大小,大小可以有_countof获得,

_countof获取字符数, sizeof获取字节数

for example:

  int a[10]; // _countof(a) == 10

_CrtSetReportMode(_CRT_ASSERT, 0); // in head of program

可以禁止C run time可能触发的debug assertion failed dialog.

windows提供的字符串比较函数

CompareString(Ex) // 比较最终用户能看到的字符串

CompareStringOrdinal // 比较内部字符串,比如注册表,xml元素,路径

windows提供new/delete

HeapAlloc / HeapFree

IsTextUnicode能够通过一系列统计性和确定性的方法判断文本文件是unicode字符还是ansi字符,但不一定准确

win32 api,布布扣,bubuko.com

时间: 2024-08-01 22:45:42

win32 api的相关文章

使用win32 API 实现串行通信 (一)

本文基于wince平台,使用win32 API实现串行通信 1.打开和关闭串行端口 串行端口设备使用CreateFile函数打开,所使用的名称要遵循特定的格式,即3个字符 COM后紧跟要打开的COM端口号,再加个冒号,冒号是Windows CE所必需的. 如,hser=CreateFile(TEXT(“COM1:”),GENERIC_READ|GENERIC_WRITE,0, NULL,OPEN_EXISTING,0,NULL),为以可读可写的方式打开COM1端口. 调用CloseHandle函

C#调用Win32 api时的内存操作

一般情况下,C#与Win 32 Api的互操作都表现的很一致:值类型传递结构体,一维.二维指针传递IntPtr.在Win32 分配内存时,可以通过IntPtr以类似移动指针的方式读取内存.通过IntPtr移动时,需要考虑指针的计算.规则总体上来说显得一致,但Win32 Api庞杂,总有一些令人困惑的函数.比如GetIpForwardTable.该函数的功能是返回Ip(v4)的路由表.在win32 的结构体定义如下: DWORD GetIpForwardTable( _Out_ PMIB_IPFO

【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

注:这里的服务是指Windows 服务. 市面上常见的安装一个服务的方法大概有这么几种: 用Process类调用sc.exe.Installutil.exe等外部工具进行安装.极不推荐,须知创建一个进程开销不小,并且依赖外部工具有损程序健壮性 使用TransactedInstaller和AssemblyInstaller安装类进行安装.不推荐,既然都用托管方法,何不用更好的方法呢 用ManagedInstallerClass.InstallHelper进行安装.这个我认为是托管方法中首选的方法,

通过 WIN32 API 实现嵌入程序窗体

写了一个不使用 COM, 而是通过 WIN32 API 实现的示例, 它把写字板程序嵌在了自己的一个面板中. 这么做可能没有实际意义, 因为两个程序之前没有进行有价值的交互, 这里仅仅是为了演示这么做到, 以下是详细注释过的主要源代码. 我把它封装到一个类中: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys

重温WIN32 API ------ 最简单的Windows窗口封装类

1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C++作为C的超集,能实现所有C能实现的功能.其实反之亦然,C本身也能完成C++超出的那部分功能,只是可能需要更多行的代码.就本人理解而言, 对于巨大型项目,还是使用纯C来架构更加稳妥: 对于中小型项目来说,C++可能更方便快捷.由于目前做的是中小项目,所以决定把C++作为主要开发语言. 1.2 关于C

C# call Win32 api时,-1如何转换为DWORD

当使用(uint)-1时,编译器会给出警告:常量-1无法转换为uint,使用unchecked语句重写.DWORD在转换为C#类型时为uint,既然无法使用uint强制转型(-1),那就需要其他办法了.既然编译器给出的提示是使用unchecked语句重写,可以一试.之前没有使用过unchecked语句,所以不熟悉其用法.看了下参考文档,MSDN是这样描述unchecked的: The unchecked keyword is used to suppress overflow-checking

Detours简介 (拦截x86机器上的任意的win32 API函数)

Detours 当然是用detours,微软明显高腾讯一筹,同上,至今没失败过.写这种HOOK一定要再写个测试程序,不要直接HOOK你的目的程序,例如QQ,因为这样不方面更灵活的测试.说明一下:Detours是微软开发的一个函数库(源代码可在http://research.microsoft.com/sn/detours 免费获得)用于修改运行中的程序在内存中的影像,从而即使没有源代码也能改变程序的行为.具体用途是:拦截WIN32 API调用,将其引导到自己的子程序,从而实现WIN32 API的

利用win32 api实现进程通信---通过剪切板

// c#中win32 api的调用 //windows 消息机制的原理 //clipboard viewer chain. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.I

.NET 框架程序使用 Win32 API

.NET 框架程序可以通过静态 DLL 入口点的方式来访问本机代码库.DllImport 属性用于指定包含外部方法的实现的dll 位置.       DllImport 属性定义如下:      namespace System.Runtime.InteropServices   {    [AttributeUsage(AttributeTargets.Method)]    public class DllImportAttribute: System.Attribute    {    p