Windows
张念
让你难过的事,你会笑着说出来
展开
-
Windows加载DLL
Windows系统平台上,你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用。Microsoft Windows自己就将一些主转载 2016-09-28 09:34:02 · 3159 阅读 · 1 评论 -
DLL导出类
MyMathFun.h#pragma once // #ifdef DLLCLASS_API // #define DLLCLASS_API _declspec(dllimport) // #else // #define DLLCLASS_API _declspec(dllexport) // #endif #define DLLCLASS_API _declspec(dl...原创 2017-01-03 14:23:57 · 337 阅读 · 0 评论 -
控制面板程序
怎样开发控制面板程序(CPL程序) CPL程序是动态链接库(DLL)的一种变形,只不过扩展名为.cpl、入口函数为CPlApplet()而不是DllMain()罢了,编写起来其实很简单。先创建一个dll工程,写下如下代码#include <windows.h>#include <cpl.h>#include <cplext.h>extern ...转载 2017-01-04 13:41:24 · 923 阅读 · 0 评论 -
VS2010 简单ATL COM开发(上)
1、打开VS2010,新建ATL COM 项目,步骤:“文件” --》“新建” --》“项目”,选择“Visual C++” --》“ATL 项目” ,填写“名称” FirstCOM --》“确定”。2、ATL 项目向导,勾选 【支持COM+ 1.0】和【支持部件注册器】,其他默认,点击完成。3、切换到类视图,右键单击项目“FirstCOM”--》“添加” --》“类”。4、选“A...转载 2016-12-26 10:11:15 · 843 阅读 · 0 评论 -
VS2010 简单ATL COM开发(下)
前面一章介绍了怎么创建ATL COM组件及注册,下面简单介绍如何调用COM组件。1、在MFC中调用有一种很方便的方法,就是通过ClassWizard利用类型库生成包装类,不过有个前提就是com组件的接口必须是派生自IDispatch。具体方法:(1)VS2010新建一个MFC基于对话框程序,调出类向导,点击“添加类”下拉菜单,选择“类型库中的MFC类”(Fromatypelibar...转载 2016-12-26 10:15:30 · 484 阅读 · 0 评论 -
ATL 的继承链处理
我们先来看一组接口定义: structIX { virtualvoidMethodX() = 0; }; structIXA:publicIX { virtualvoidMethodXA() = 0; }; structIXB:publicIX ...转载 2017-01-06 11:03:50 · 376 阅读 · 0 评论 -
非模态对话框的操作
与模态对话框不同,非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处:非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用...原创 2015-08-21 12:35:54 · 1773 阅读 · 0 评论 -
CButton 按钮类的重写
<p>//头文件 //CGWBButton.h</p><pre name="code" class="cpp">#if !defined(AFX_WBBUTTON_H__518122CF_358F_11D4_8F4F_00402656D980__INCLUDED_)#define AFX_WBBUTTON_H__518122CF_358F...原创 2016-03-18 16:08:51 · 2843 阅读 · 0 评论 -
获得各类指针、句柄
最近有些人在问MFC编程一些要点,有一些句柄的获取、指针的获取是常见的问题,本文将对这些问题做以解释,参考了前人的笔录(见reference),希望能够帮助大家更方便地进行MFC程序开发。 一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针和句柄获取和操作问题。本文中将针对各类句柄的获得、指针的获得以及M...转载 2016-04-06 10:48:35 · 462 阅读 · 0 评论 -
使用CreateProcess和wget来后台下载文件
//进行文件的下载DWORD dwExitCode;//获取输入的URLCString m_strURL;GetDlgItem(IDC_EDITURL)->GetWindowText(m_strURL);CString m_strPath;GetDlgItem(IDC_EDITPATH)->GetWindowText(m_strPath);//使用命令行来下载URL下面...原创 2016-08-03 09:29:37 · 551 阅读 · 0 评论 -
ActiveX控件
1.ActiveX的基本概念ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。 ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动...转载 2016-08-12 10:30:04 · 23682 阅读 · 5 评论 -
VS2010 中常见的错误
1. error MSB4044: 未给任务“CppClean”的必需参数“FoldersToClean”赋值 The "CppClean" task was not given a value for the required parameter "FoldersToClean"解决办法:工程 - 属性 - 配置属性 - 常规 - 中间目录,为空导致这个错误。写入$(C...原创 2016-12-26 16:38:29 · 5202 阅读 · 0 评论 -
DLL导出变量
声明为导出变量时,同样有两种方法: 第一种是用__declspec进行导出声明#ifndef_DLL_SAMPLE_H#define_DLL_SAMPLE_H//如果定义了C++编译器,那么声明为C链接方式#ifdef__cplusplusextern"C"{#endif//通过宏来控制是导入还是导出#ifdef_DLL_SAMPLE#defineDLL_SAMPLE_...转载 2017-01-03 13:53:03 · 918 阅读 · 0 评论 -
DLL导出函数
DLL的链接方式分为两种:隐式链接和显式链接DLL导出的函数 和 导出类在调用时,有些区别,这里暂时不讲,直说简单的导出函数;隐式链接:#include "stdafx.h"#include "MathDLL.h"#pragma comment(lib, "MathDLL.lib") //你也可以在项目属性中设置库的链接int main(){ ...原创 2017-01-03 11:25:08 · 645 阅读 · 0 评论 -
windows 内存原理与管理
本文基本上是windows via c/c++上的内容,笔记做得不错。。本文背景:在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。本文目的:对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。转载 2017-02-14 17:01:50 · 3223 阅读 · 0 评论 -
windows下 内存区域的分配
内存分配方式:1. 静态存储区分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2.栈区分配 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.堆区分配亦称动态内存分配。程序在运行的时转载 2017-02-15 10:39:15 · 5394 阅读 · 5 评论 -
32位和64位系统区别
首先,可寻址的内存空间是32位系统和64位系统最为显著的特点。32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系统属性中显示的3.xxG。但64位CPU则有了很大改变,64位CPU的最大寻址空原创 2016-04-01 10:44:18 · 453 阅读 · 0 评论 -
浏览器访问网页的过程
我们来看当我们在浏览器输入http://www.Ub11.info:81/mytest/index.html,幕后所发生的一切。首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把htt转载 2016-07-29 18:15:58 · 993 阅读 · 0 评论 -
增加exe的托盘图标
这里首先需要导入ico文件,这里我导入的是qq音乐的图标,将其重命名,如下图:接着增加托盘图标的程序:void AddTaskIcon(){ //增加托盘图标 HICON m_hIcon = ::LoadIcon(m_hInstance,MAKEINTRESOURCE(IDI_MUSIC)); m_IconData.cbSize=sizeof(NOTIFYICON原创 2016-12-23 13:57:52 · 591 阅读 · 0 评论 -
操作注册表
1. 注册表简介注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息。16位驱动在Winnt (Windows New Technology)下无法工作,所以所有设备都通过注册表来控制,一般这些是通过BIOS(基本输入输出系统)来控制的。在Win95下,16位驱动会继续以实模式方式设备工作,它们使用转载 2016-12-16 15:24:15 · 432 阅读 · 0 评论 -
添加系统右键带单
这里首先说一下: 打开注册表,找到HKEY_CLASSES_ROOT\Directory\shell 和 HKEY_CLASSES_ROOT\exefile\shell 当对一个file(文件)右键时,找到的是Directory\shell里面的command当对一个exe右键时,找到的是exefile\shell里面的command其他也一样主要思路: 通过操作注册原创 2016-12-19 16:23:47 · 290 阅读 · 0 评论 -
进程间的相互通讯 C++
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方 另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的转载 2016-03-28 09:34:42 · 1612 阅读 · 0 评论 -
创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)
首先需要获取三个路径 :桌面路径 、快速启动栏路径、 开始->程序组路径//得到当前桌面路径 BOOL GetDesktopPath(char *pszDesktopPath) { LPITEMIDLIST ppidl = NULL; if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ppidl) == S_OK原创 2016-12-19 15:57:31 · 4892 阅读 · 1 评论 -
设置开机自启动
void SetAutoRun(BOOL bAutoRun){ //设置开机自启动 HKEY hKey; LPCTSTR strRegPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";//找到系统的启动项 if (bAutoRun) { if (RegOpenKeyEx(HKEY_CURRENT_原创 2016-12-19 15:41:15 · 536 阅读 · 0 评论 -
使用CreateFileMapping,MapViewOfFile创建内存映射文件,如何向内存映射文件中写入数据,读取数据。
#include #include #include #include #define BAD_POS 0xFFFFFFFF // returned by SetFilePointer and GetFileSize#define SUCCESS 0using namespace std;typedef DWORD mmf_share_mode;typedef DWORD m原创 2016-03-28 11:42:50 · 5723 阅读 · 0 评论 -
如何建立DLL
动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的OBJ文件中相比更有利于代码的重用。但随着Windows这样的多任务环境的出现,函数库的方法显得过于累赘。如果为了完成屏幕输出、消息处理、内存管理、对...原创 2017-01-03 11:11:33 · 429 阅读 · 0 评论 -
VS2008 + WDK 配置 及其编译错误
1.安装WDK,并配置系统环境变量:WDKROOT-D:\WinDDK\7600.16385.12.启动VS2005,在菜单栏“工具”-“选项”内选择“项目和解决方案”-“VC++目录”依次添加所需的目录,具体配置如下图:注意:$(WDKROOT)\inc\api一定要放在第一个,否则会导致编译失败3.具体的项目属性按照如下设置:注:创建项目时选择“Win32项目...原创 2017-01-16 18:55:11 · 970 阅读 · 0 评论