Windows
文章平均质量分 82
乄失忆丶雨
要想立于不败之地,就得不断学习和努力!
展开
-
DLL中导出函数的两种方式(dllexport与.def文件)
DLL中导出函数的声明有两种方式:一种方式是:在函数声明中加上__declspec(dllexport);另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。方式一:在函数声明中加上__declspec(dllexport)/// 在动态链接库程序中/// 声明动态链接库(**.dll)的对转载 2017-11-15 10:43:35 · 898 阅读 · 0 评论 -
__stdcall,__cdecl,_cdecl,_stdcall,__fastcall,_fastcall 区别简介
1.今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter);不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall和__cdecl两者的区别; #define CALLBACK __stdcall#define WINAPI __stdcall转载 2017-04-06 09:43:23 · 218 阅读 · 0 评论 -
多线程六 经典线程同步之信号量Semaphore
1、首先来看看如何使用信号量 信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个 CreateSemaphore函数功能:创建信号量函数原型:HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG l转载 2017-04-06 09:41:02 · 1588 阅读 · 0 评论 -
赛普拉斯 cypress Cyapi使用心得
Cyapi使用心得(1)--USB连接2009-11-07 19:23 用Cyapi也有一阵了,这个确实比EZusb的api好用,简单说下Cyapi的使用心得,在编程中应该注意的一些问题,毕竟,说起来,那个CYapi的说明文档讲的实在太简单了点,好多东西都讲得不明白,只能在使用中自己慢慢积累了。 首先说下前提,固件架构是EZ-转载 2017-04-01 10:56:59 · 2865 阅读 · 1 评论 -
WDM驱动程序开发之读写设备存储器:KMemoryRange类
KMemoryRange类:一、Overview KMemoryRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。考虑到可移植性,所有对memory周期(memory cycle)进行译码的设备驱动程序必须用这个类对memory的位置(location)进行正确的访问(access)。KMemoryRange是KPeripheralAddress类的派生类。转载 2017-03-15 16:40:11 · 1233 阅读 · 0 评论 -
WDM驱动程序开发之读写设备寄存器:KIoRange类
KIoRange类:一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIo转载 2017-03-15 16:38:20 · 798 阅读 · 0 评论 -
WDM驱动程序开发之PCI设备的配置空间:KPciConfiguration, KPciSlot类
KPciConfiguration, KPciSlot类:一、Overview KPciSlot类和KPciConfiguration类用于在驱动开发过程中协助支持基于PCI总线的设备。KDevice的派生类可以包含KPciConfiguration类的一个实例来存取设备配置空间的内容。为了满足这些需要,驱动编写人员需要提供PCI vendor ID和device ID给它的构造转载 2017-03-15 16:36:11 · 925 阅读 · 0 评论 -
C++版循环缓冲区类
[cpp] view plain copy print?// 声明 class CCycleBuffer { public: BOOL isFull(); BOOL isEmpty(); void Empty(); int GetLength(); CCycleBuffer(int size);转载 2017-04-07 10:04:40 · 2387 阅读 · 0 评论 -
在VC6.0+WDM开发的错误异常
在VC6.0+WDM开发的错误异常9054DMA_WDMDriver.cppe:\WorkPlace\9054DMA_WDM\driver\9054DMA_WDMDriver.h(14) : error C2059: syntax error : 'bad suffix on number'e:\WorkPlace\9054DMA_WDM\driver\9054DMA_WD原创 2017-02-24 15:06:09 · 502 阅读 · 0 评论 -
DriverStudio开发PCI设备DMA数据传输
DriverWizard向导可以创建基本的wDM驱动程序框架,包括总线类型,地址空间,中断源,DMA资源,以及IOCTL(i/o控制代码)的定义等等。详细情况可参看DriverStudio的帮助文档,以下主要介绍如何用DriverWorks编写DMA方式的驱动程序。 DriverWorks关于DMA操作。封装了三个类:KDmaAdapter, KDmaTransfer和KC转载 2017-02-24 10:14:54 · 690 阅读 · 0 评论 -
VC对话框焦点转换问题
建立一个基于对话框的应用程序,可以看到在CXxxApp的InitInstance()函数中: CDlgaDlg dlg; m_pMainWnd = &dlg;应用程序启动时,必须对CXxxApp的成员变量m_pMainWnd进行赋值,否则无法运行。在单文档的工程中,我们看不到这种赋值操作,它是在 if (!ProcessShellCommand(转载 2017-02-21 10:21:28 · 887 阅读 · 1 评论 -
INF文件详解
INF文件格式要求一个INF文件是以段组织的简单的文本文件。一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名。每个段包含特定的条目和命名,这些命名用于引用INF文件其它地方定义的附加段。INF文件的语法规则:1、要求的内容:在特定的INF文件中所要求的必选段和可选段、条目及命令依赖于所要安装的设备组件。端点顺序可以是任意的,大多数的INF文件安转载 2017-01-20 16:38:23 · 795 阅读 · 0 评论 -
解决 安装驱动程序后设备管理器中显示黄色问号
其实很简单,在inf中有中设置图表索引显示黄色问号肯定说明 你是这样填写的HKR,,Icon,,"-18" PCI设备要改成 -5 数值如下Computer 0 Display 2 Mouse 5 Keyboard 6 FDC 9 HDC 9 Ports 10 Net 15 System 0 Sound 8转载 2017-01-20 10:36:53 · 3444 阅读 · 0 评论 -
编译驱动时出现的错误Error translating C:\Documents and Settings\Administrator\桌面\PLX9054_DMA_LVDS\Driver\objfr
--------------------Configuration: PLX9054_DMA_LVDS - Win32 Free--------------------Compiling resources with DDK resource compiler...Compiling with DDK compiler...PLX9054_DMA_LVDSDevice.cppPLX原创 2017-01-19 11:46:18 · 783 阅读 · 0 评论 -
在驱动设计的时候出现的error C2509
在驱动设计的时候出现的error C2509可能就是在function.h文件中没定义相应的宏;function.h是程序员将要重载的虚函数的说明。DRIVER_FUNCTION_XXXX对应IRP_MJ_XXXX。比如:DRIVER_FUNCTION_READ 对应着IRP_MJ_READ。此处:#define DRIVER_FUNCTION_STARTIO //对应原创 2017-01-18 17:15:36 · 549 阅读 · 0 评论 -
error LNK2001: unresolved external symbol __endthreadex 解决办法
error LNK2001: unresolved external symbol __endthreadex这个问题,找到的解决办法如下没有用到beginthreadex endthreadex两个例程.在VC中编译程序时显示Linking...nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external sy转载 2017-04-06 18:42:46 · 603 阅读 · 0 评论 -
精准计算程序或CPU运行时间
精准计算程序或CPU运行时间下面就是计算读寄存器所耗时间:LARGE_INTEGER t1, t2, tc; QueryPerformanceFrequency(&tc); QueryPerformanceCounter(&t1); WORD wNewPos = 0; TG_ReadReg( Handle, 0x100, &wNewPos, 1 );QueryPerforman原创 2017-08-10 09:38:26 · 801 阅读 · 0 评论 -
Edit自动换行
CEdit edit;CString str;str += "abc";str += "/r/n";str += "def"; edit.SetWindowText(str);控件中显示为:"abc def" 这是因为除了要用/r/n外,还要都CEdit 的属性进行设置:Auto HScroll 设置为 FalseMultiLine 设置为 True转载 2017-09-28 14:53:37 · 583 阅读 · 0 评论 -
MFC运行时窗口总是最小化,不直接弹出
1、这个问题是由于如下图步骤时勾选了“最小化“。解决办法如下第二张图,在InitDialog()函数中删除ShowWindow(MINSIZE).这样再运行时就会直接弹出了。转载 2017-09-28 14:25:29 · 1782 阅读 · 0 评论 -
MFC让对话框窗口始终在最前&MFC弹出非模态对话框&居中
一、MFC让对话框窗口始终在最前方法一:在对话框的属性中,在more style中有一项是System model,选上它,即可!方法二:OnInitDialog里加入SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);外部调用: m_dialog->SetWindowPos(&wndTopMost, 0, 0, 400,原创 2017-09-28 11:18:09 · 8719 阅读 · 1 评论 -
Windows下C++ 串口编程实例
1. 本例子使用了比较规范的软件设计方法,类的设计具有比较好的可扩展性和移植性、代码的注释采用doxgen支持的javaDoc风格。2. 为了能方便初学者更快地了解和入门,几乎每一行代码都加上了详细的注释,对于注释中如果依然有不清楚的概念,相信你通过百度和google一定能找到答案。3. 本例子设计的串口操作类可以直接移植到其他的工程中去,大家也可以根据自己的需要添加其他的接口。4.转载 2017-09-27 16:14:44 · 2558 阅读 · 0 评论 -
解决WinDbg调试VMWare虚拟机连接不上
/*设定端口*/在VMware建立系统Windows XP SP3,并正确设定了端口号:增加"串行端口","\\.\pipe\com_1""该端是服务器。""另一端是应用程序。"选中 "已连接"选中 "启动时连接"设置虚拟机Windows XP SP3系统中的 boot.ini文件multi(0)disk(0)rdisk(0)partition(1)\W原创 2017-09-11 11:43:53 · 3187 阅读 · 0 评论 -
MFC文件操作大全
获得文件路径:GetFilePath()获得文件名:GetFileName()获得文件标题:GetFileTitile()Path is : "C:\WINDOWS\SYSTEM.INI"Name is : "SYSTEM.INI"Title is: "System"1.创建文件夹创建路径上最后的一个文件夹[cpp] view plain c转载 2017-09-26 13:42:21 · 419 阅读 · 0 评论 -
error C3872: “0x3000”: 此字符不允许在标识符中使用错误 的解决办法
主要是拷贝的程序问题,有错误的空字符0x3000是汉语的空格,也就是全角空格,相当于一个汉字,但你又看不见它。你知道的,像逗号,有半角(,)和全角(,)之分的,其实空格也有。0x3000是全角的空格,0x20是半角的空格。最好把这个语句的后面空白部分,都删除掉,免得有不可见的全角空格。转载 2017-09-26 12:24:20 · 2602 阅读 · 0 评论 -
MFC中用CFile读取和写入文件
MFC提供了CFile类方便文件的读写,首先要知道,文件的数据读取、数据写入与文件指针的操作都是以字节为单位的,数据的读取和写入都是从文件指针的位置开始的,当打开一个文件的时候,文件指针总是在文件的开头。常规方法如下:CFile file;file.open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError转载 2017-09-26 12:21:31 · 2666 阅读 · 0 评论 -
数字字符串转十六进制
数字字符串转十六进制char HexChar(char c){ if((c>='0')&&(c<='9')) return c-0x30; else if((c>='A')&&(c<='F')) return c-'A'+10; else if((c>='a')&&(c<='f')) return c-'a'+10; else return 0x10;}//将原创 2017-09-25 10:42:48 · 1424 阅读 · 0 评论 -
Run-Time Check Failure #3 - The variable 'comstat' is being used without being initialized
方案1: 改变项目配置属性一种解决方案是改变基本运行时检查(changing the runtime checks in project settings):在菜单Project->Project properties-> C/C++ -> Code generation-> Basic Runtime checks --> change to 'Default',在中文版中是:项目-转载 2017-09-24 15:23:45 · 1204 阅读 · 0 评论 -
记录windows驱动开发inf文件详解
Windows驱动程序开发相关1. 驱动的注册表位置:1. 硬件子键:HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Enum指明硬件的HID,VID,DID等跟硬件和硬件厂商相关的信息。2. 服务子健:HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Services它主要是跟转载 2017-08-29 10:28:08 · 1314 阅读 · 1 评论 -
DPC(延迟过程调用)的技术细节
-DPC(延迟过程调用)的细节NTINSIDER,16卷,1期,1至2月2009延迟过程调用(DPC)是一种Windows常用功能。用途是广泛和多样的,但最常用的是我们通常所说的“ISR完成”和WindowsTimer底层技术。 如果DPC常用,为什么还要写此篇?我们发现,大多数人并不真正了解DPC工作的底层实现细节。并且,事实证明,一个深入的理解,在选择选项创建D转载 2017-09-04 11:47:29 · 1873 阅读 · 0 评论 -
Windows 驱动机制-定时、DPC及延时
1、定义Timer及DPCtypedef struct _DEVICE_EXTENSION { . . . KDPC Dpc; KTIMER Timer; } DEVICE_EXTENSION, *PDEVICE_EXTENSION;转载 2017-09-04 11:46:27 · 3854 阅读 · 0 评论 -
PagedPool 和 NoPagedPool的区别
PoolType在 MSDN的介绍上有 N 种, 其实常用的只有 2 种:PagedPool 和NonPagedPool。PagedPool是分页内存,简单来说就是物理内存不够时,会把这片内存移动到硬盘上,而NonPagedPool是无论物理内存如何紧缺,都绝对不把这片内存的内容移动到硬盘上。 在往下讲之前,先补充一个知识, 就是我们操作的内存,都是虚拟内存,和物理内存是两码事。 但虚转载 2017-09-04 11:10:05 · 1909 阅读 · 1 评论 -
链接选项修改解析----驱动开发
链接选项修改解析> ntoskrnl.libNT:驱动程序需要链接此库。如果是WDM驱动程序,则需要链接wdm.lib。> /nologo:链接时不显示版权信息。> /base:"0x10000":加载驱动时,设定加载在虚拟内存中的位置。> /stack:0x400000,0x1000:设定函数使用堆栈的大小。> /entry:"DriverEntry":入口函原创 2017-02-08 17:48:11 · 245 阅读 · 0 评论 -
配置WINDOWS驱动程序的开发环境-走出第一步
开发我们自己设计的一块板子的PCI设备驱动,并给我指出了方向,具体说就是“三步走”战略:(1)入门。熟悉基于DriverStudio开发环境的设备驱动开发,同时侧面了解PCI设备驱动程序的相关知识。(2)进阶。运用纯DDK进行驱动开发,着重于学习别人的实例,并能熟练进行调试和修改。(3)实战。深入研究PCI总线标准,结合具体的电路板特性开发出一套自己的设备驱动。现在转载 2017-01-17 14:15:10 · 850 阅读 · 0 评论 -
VC6.0 +WDK 开发驱动的环境配置
1.安装好VC6和DWK,先后顺序无关。 从开始菜单找到WDK的程序目录,进入“Windows XP Checked Build Environment”,输入命令"build",此时WDK将会把自己进行编译,大约需要1分钟。2.VC6设置Include/Lib/Executable目录。 设置为自己需要编译的平台的各个目录即可, Include要确保找到ntddk.h转载 2017-01-09 11:08:57 · 369 阅读 · 0 评论 -
MSDN对链接器工具错误 LNK2019的解释
链接器无法找到函数“function”中使用的外部符号“symbol”的定义。 有许多问题可能会导致此错误。 本主题将帮助你确定原因并找到解决方案。外部符号是你在源代码中用于引用在另一对象或库文件中定义的内容的声明名称,例如,一个外部函数或全局变量。 链接器负责解析每个对象文件中链接到应用程序或 DLL 的所有外部符号引用。 如果链接器无法在任何链接的文件中找到外部符号的匹配定义,那么原创 2016-12-20 11:36:13 · 1826 阅读 · 0 评论 -
"应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”
“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”一般情况下都是程序中所运行的库文件与系统位不匹配,换句话说:32位系统程序中加载的动态库或静态库也应该是32位的,64位系统程序中加载的动态库或静态库也就应该是64 位的。希望对大家有帮助!原创 2016-12-20 11:04:32 · 4241 阅读 · 0 评论 -
windows xp 驱动开发(三)DDK与WDK WDM的区别
转自: http://www.cnblogs.com/hyddd/archive/2009/03/15/1412684.html 最近尝试去了解WINDOWS下的驱动开发,现在总结一下最近看到的资料。 1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发Java程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS转载 2017-01-06 10:33:08 · 439 阅读 · 0 评论 -
Windows驱动开发的一些资源下载记录
1. 微软的WDK7.1、WDK8及符号表(symbols)等入口地址:http://msdn.microsoft.com/en-US/windows/hardware/hh852365① WDK8.1 百度盘备份:http://pan.baidu.com/s/1pJ7LH6jWDK8.1Sample示例 百度盘备份:http://pan.baidu.c转载 2016-12-28 16:32:27 · 473 阅读 · 0 评论 -
基于MFC的单文档,多文档,对话框应用程序
从类的角度区分:基于对话框(3个类):CAboutDlg程序名App程序名Dlg单文档(5个类):CAboutDlgCMainFrame程序名App程序名Doc程序名View多文档(6个类):CAboutDlgCMainFrame程序名App程序名Doc程序名ViewCChildFrame --------------------------原创 2016-12-19 14:23:23 · 258 阅读 · 0 评论 -
PostMessage(异步)和SendMessage(同步)的区别
PostMessage和SendMessage的区别 1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他转载 2016-12-22 13:33:07 · 1466 阅读 · 0 评论