李sir_Blog

博客园 首页 联系 订阅 管理

随笔分类 - vc++

1 2 3 4 5 下一页

摘要:首先来阐述几个重要的概念: 1。community (共同体名):如果翻译过来可能会显得难于理解,其实你完全可以把它理解为一个带有权限的登陆账户,这是你访问网络设备的重要凭据,比如你要访问交换机, 假如交换机的community是public,其权限是只读的,那你一次用户登陆交换机就可以查看有关交换机记录的数据。如果其权限是读写的,你你就有 权修改其中的一些设置,如封锁某一个交换机的端口。大部分交换机默认情况下,以public作为只读community,以private作为读写 community。 2。Oid(对象标志符):是以SMI(Structure of Management Info 阅读全文
posted @ 2012-03-02 09:16 李sir 阅读(4181) 评论(0) 推荐(2) 编辑

摘要:在Windows 下实现SNMP协议的编程,可以采用Winsock接口,在161,162端口通过udp传送信息。在Windows 2000中,Microsoft已经封装了SNMP协议的实现,提供了一套可供在Windows下开发基于SNMP的网络管理程序的接口,这就是 WinSNMP API。3.1 什么是WinSNMPWinSNMP的目的是为在Windows下开发基于SNMP的网络管程序提供解决方案。它为SNMP网管开发者提供了必须遵循的开放式单一接口规范,它定义了过程调用、数据类型、数据结构和相关的语法。图3.1显示了一个网络管理站(NMS)和网络管理代理(Agent)之间端到端的SNMP连 阅读全文
posted @ 2012-03-02 08:49 李sir 阅读(9078) 评论(1) 推荐(0) 编辑

摘要:一个dlg程序中使用activex控件遇到问题。 在dlg中要响应activex的事件,那么在dlg需要映射BEGIN_EVENTSINK_MAP 阅读全文
posted @ 2011-11-30 15:03 李sir 阅读(383) 评论(0) 推荐(0) 编辑

摘要:OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。先看一个简单的使用了OpenMP程序int main(int argc, char* argv[]){#pragma omp parallel for for (int i = 0; i < 10; i++ ) { printf("i = 阅读全文
posted @ 2011-09-30 15:30 李sir 阅读(1612) 评论(0) 推荐(0) 编辑

摘要:http://blog.csdn.net/laiboy/article/details/5755324 阅读全文
posted @ 2011-09-30 13:41 李sir 阅读(901) 评论(0) 推荐(0) 编辑

摘要:我们知道,很多PE分析工具都可以查看一个EXE文件的引用DLL文件函数表,其实,这个本身就是存储在EXE头部的一个重要信息,今天,我们就来研究一下:我们借用一张PE结构图来分析:一个EXE完整的PE结构分五大部分。见上图.最开头的是部分是DOS部首,DOS部首由两部分组成:DOS的MZ文件标志和DOS stub(DOS存根程序)。之所以设置DOS部首是微软为了兼容原有的DOS系统下的程序而设立的。紧接着的是真正的PE文件头。值得注意的是PE文件头中的IMAGE_OPTIONAL_HEADER32是一个非常重要的结构,PE文件中的导入表、导出表、资源、重定位表等数据的位置和长度都保存在这个结构里 阅读全文
posted @ 2011-09-22 12:19 李sir 阅读(12063) 评论(0) 推荐(1) 编辑

摘要:话说,有这样一道据说是月薪2W的笔试题:#include "stdio.h"void print(){*}void main(){}要求在*部分写代码使整个程序运行后输出“hello world”,有些人说,这还不简单啊,于是写出这样的代码:view sourceprint?01.#include "stdio.h" 02.void print() 03.{ 04.printf("hello world"); 05.} 06.void main() 07.{ 08.print(); 09.}这样写的确是没问题,但是违背了题目的要求,因 阅读全文
posted @ 2011-09-22 11:34 李sir 阅读(2530) 评论(3) 推荐(1) 编辑

摘要:HWND hWorker,hRebar,hComEx,hcom,hEdit; HWND hwndParent=::FindWindow( "IEFrame ",NULL);//找到IE窗口 char szError[260]; hWorker=FindWindowEx(hwndParent,0, "WorkerA ",NULL);//找到工作区窗口(不是internet explorer server窗口) hRebar=FindWindowEx(hWorker,0, "ReBarWindow32 ",NULL);//找到Rebar窗 阅读全文
posted @ 2011-09-22 10:45 李sir 阅读(3028) 评论(0) 推荐(1) 编辑

摘要:1、弹出式广告框也是IE浏览窗口,一般来说,它是一个无菜单、无工具栏窗口。所以可以在桌面上打开一个窗口时,首先判断该窗口类型是否是“IEFrame”,接着判断IEFrame的子窗口类型“WorkerW”的属性是否是不可见(这是一般弹出式广告窗口的特征),这样就可以向该窗口发出关闭的消息,以上步骤一般能自动关闭大部分弹出广告框。 2、通过WINDOWS编程中的钩子(HOOK)函数解决截获在桌面上打开窗口的消息。钩子函数的基本原理就是对WINDOWS系统的某些动作注册,当发生这些事件时首先调用预先设置的回调函数,回调函数处理后,再由原来的函数处理。这里回调函数的作用正是实现1中叙述的功能。因为.. 阅读全文
posted @ 2011-09-22 10:31 李sir 阅读(1242) 评论(1) 推荐(0) 编辑

摘要:http://www.codeproject.com/KB/recipes/lib-conhash.aspx 阅读全文
posted @ 2011-06-21 09:04 李sir 阅读(382) 评论(0) 推荐(0) 编辑

摘要:有一个n边形,顶点为p1,p2,...,pn;给定一个已知点p,判断p在此多边形内还是外。预备知识: 两线段相交的定义,如果一条线段的两端分别处在另一条线段的两端,则此两线段相交判断2点在线段的两侧可以用向量的叉乘实现!基本步骤:1,过p点垂直向上作一条射线2,判断此射线与n边形n条边的交点3,把所有交点相加,如果是奇数则说明在多边形内,否则在多边形外思路非常的简单,另外说明一下几种特殊的情况:1,射线与多边形的顶点相交;比如射线过多边形的Pi点,则如果Pi-1和Pi+1在此射线的异侧,此交点可以算一个,如果此两点在射线的同侧,则此交点不计。此结论非常简单,画个图应该就能明白了2,p点在多边形 阅读全文
posted @ 2011-06-20 16:22 李sir 阅读(7732) 评论(0) 推荐(0) 编辑

摘要:1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing 阅读全文
posted @ 2011-03-22 10:18 李sir 阅读(732) 评论(0) 推荐(0) 编辑

摘要:void main() { LARGE_INTEGER lv; // 获取每秒多少CPU Performance Tick QueryPerformanceFrequency( &lv ); // 转换为每个Tick多少秒 double secondsPerTick = 1.0 / lv.QuadPart; for ( size_t i = 0; i < 100; ++i ) { // 获取CPU运行到现在的Tick数 QueryPerformanceCounter( &lv ); // 计算CPU运行到现在的时间 // 比GetTickCount和timeGetTime 阅读全文
posted @ 2011-03-21 11:06 李sir 阅读(586) 评论(0) 推荐(0) 编辑

摘要:精确的时间计时,有时候是非常必要的。比如播放多媒体时视频与音频的时间同步,还有在测试代码的性能时,也需要使用到非常精确的时间计时。还有测试硬件的性能时,也需要精确的时间计时。这时就需要使用QueryPerformanceCounter来查询定时器的计数值,如果硬件里有定时器,它就会启动这个定时器,并且不断获取定时器的值,这样的定时器精度,就跟硬件时钟的晶振一样精确的。QueryPerformanceCounter 查询性能计数器 The QueryPerformanceCounter function retrieves the current value of the high-resolu 阅读全文
posted @ 2011-03-21 11:05 李sir 阅读(1121) 评论(0) 推荐(0) 编辑

摘要:Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。有关log4cxx的更多信息可以从Apache Loggin Service的网站http://logging.apache.org获得。当前的最新版本为0.10.0,本文内容及示例代码都是基于此版本。可以从官方网站(http://logging.apache.org/log4cxx/index.html)获取源代码,下载版本为apache-log4cxx-0.10.0,下载完成后解压缩到合适目录 阅读全文
posted @ 2011-03-21 10:46 李sir 阅读(4514) 评论(0) 推荐(0) 编辑

摘要:#include <windows.h>#include <stdio.h>#include <aclapi.h>void main(){ DWORD dwRes, dwDisposition; PSID pEveryoneSID = NULL, pAdminSID = NULL; PACL pACL = NULL; PSECURITY_DESCRIPTOR pSD = NULL; EXPLICIT_ACCESS ea[2]; SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORI 阅读全文
posted @ 2011-02-25 15:22 李sir 阅读(709) 评论(0) 推荐(0) 编辑

摘要:ACL即访问控制表,由一个ACL头和零到多个ACE(Access_control entry 访问控制实例)构成。ACL的应用平台是WindowsNT/2000/XP/2003,实际上WindowsNT3.1之后的使用NT内核的操作系统都支持这个结构。ACL标志了第三方对某一个对象的访问权限,这个对象可以是任何类的实例,当然也包括了进程(Process)对象。1 概述每一个ACE包含一个授权对象(Trustee)和一组权限,一个有效的SecurityDescriptor(安全标志)包含两个ACL,即DACL和SACL。在WindowsNT下,使用OpenProcess打开进程的时候,系统会根据 阅读全文
posted @ 2011-02-25 15:20 李sir 阅读(1261) 评论(0) 推荐(0) 编辑

摘要:相信大多数的程序员或用户,在Windows中见到类似于下面的亲切而又温馨的提示信息,都不会感到陌生:“XXX执行了非法操作,将被关闭。要终止程序,请单击确定;要调试程序,请单击取消。”或者,“是否向Microsoft发送错误报告?发送,不发送。”如果这个程序运行在无人值守、需要保持连续工作状态的场合,而其中的bug又一时难以排除,就需要采取应急措施,消除或减少程序出错造成的影响。本文讨论解决这个问题的办法。做过一定硬件开发的人都知道,恶劣的工作环境,带有缺陷的硬件设计,不完善的算法等内外因素,都可能造成程序“跑飞”,因此专门加装一个“看门狗”,负责监视程序主体,必要时产生复位中 阅读全文
posted @ 2011-01-30 15:58 李sir 阅读(591) 评论(0) 推荐(0) 编辑

摘要:检查自已的代码时,发现一个比较弱智的错误,是关于转码的,和CString的=操作符有关。 为了能简单重现,我模拟了一下代码: //未有UNICODE或_UNICODE定义 USES_CONVERSION; CString sTest(_T("test中文")); sTest = A2W(sTest); ::MessageBoxW(NULL,(LPCWSTR)sTest.GetBuffer(0),L"test中文标题",MB_OK); 输出: 对话框的内容区为乱码。 我的想象中:A2W取得宽字符串,然后赋值给CString,CString中应该保存的是宽字符串。 显然,并不如我想,想是没用的,仔 阅读全文
posted @ 2011-01-30 13:11 李sir 阅读(1613) 评论(0) 推荐(1) 编辑

摘要:听过无数次不要TerminateThread,只是工作中常用,貌似也没有什么问题。今天在高强度测试中发现了一个不可原谅的错误。参看下面的例子DWORD __stdcall mythread(void* ){ while( true ) { char* p = new char[1024]; delete p; }}int _tmain(int argc, _TCHAR* argv[]){ HANDLE h = CreateThread(NULL, 0, mythread, NULL, 0, NULL); Sleep(1000); TerminateThread(h, 0); h = NULL; 阅读全文
posted @ 2011-01-24 10:21 李sir 阅读(873) 评论(0) 推荐(0) 编辑

1 2 3 4 5 下一页