Windows开发
silvervi
这个作者很懒,什么都没留下…
展开
-
DLL调试中断点失效的问题
用VS2008编写了一个DLL工程,打算加上application进行调试,结果点下F5,DLL工程中的所有断点都被禁掉了,显示如下: The breakpoint will not currently be hit. No symbols have been loaded for this document. 在网上搜了一下有没有找到合适的结果,自己原创 2009-12-16 14:47:00 · 7910 阅读 · 2 评论 -
DebugView 在Vista及Win7下打印kernel mode调试信息的方法
<br /><br /><br /> 这两天在开发中,想用DebugView查看Win7下service的相关TRACE信息,却总是不成功,baidu到了一些信息,只有user mode下的APP信息打印的方法,没有kernel mode下的,最后在sysinternals的论坛中找到了答案。<br /> <br /> 步骤如下:<br /><br /><br /> 1. 首先,在注册表中设置:<br /> HKLM/SYSTEM/CurrentCon原创 2010-11-17 13:39:00 · 9840 阅读 · 1 评论 -
Windows静态链接库使用小结
<br /> <br /> 对于实用多了DLL动态链接库的同学来说,可能乍一看到静态链接库,会不由自主的想到导出函数,导入函数之类的概念。最近我在看一个离职同事的代码时就陷入了对静态库中全局函数导出的疑问,明明在代码中没有看到有地方对该全局变量有导出,但是在使用该LIB的AP中仍然能看到对该变量extern后的使用。<br /> <br /> 究其原因,静态链接库不存在导出的概念,在链接过程中,静态链接库LIB中的指令都全部被直接包含在最终生成的 EXE 文件中了,因此如果用的是静态原创 2010-11-09 15:10:00 · 1855 阅读 · 0 评论 -
log off时应用程序不退出的2种解决办法
<br /> 最近公司开发一个加密的项目,客户要求在log off以后加密过程不能停止,即数据转换过程必须还要继续。之前的程序是用MFC写的,为了最小化工作量,我做了一些调研,大致找到有两种办法。<br /> <br />1. 将数据转换过程写为service<br /> <br /> <br />这是最通用的方法,方法是将数据转换的线程转移到service中。当需要进行数据转换时,由AP通知service对需要加解密的目标进行数据转换。<br />这个方法实现起来改动幅度相对较大原创 2010-11-01 16:57:00 · 3076 阅读 · 0 评论 -
windows接收登陆消息
<br />windows接收系统登陆消息有几种方式:<br /> <br />1. 通过WM_WTSESSION_CHANGE消息,需要注意的是该消息仅支持XP以上的系统,并且在使用前要调用WTSRegisterSessionNotification函数来注册该消息。<br /> <br />2. 通过WinLogon Notification Package<br /> <br />3. 通过GINA,Win7和Vista下为CP<br /> <br />由于我的程序中只是接收消息即可,因此只使用到了第原创 2010-10-14 20:04:00 · 1417 阅读 · 0 评论 -
_beginthread传递参数时容易犯的错误
<br /> 下面的程序你能看出来哪里有问题吗?<br /> <br />void MyFun(){ WCHAR wszFileName[MAX_PATH] = L"C://test.txt"; _beginthread(ThreadFun, 0, wszFileName);}void ThreadFun(void *pArguments){ //do something //... WCHAR wszFileName[MAX_PATH] = L""原创 2010-09-14 19:52:00 · 8176 阅读 · 0 评论 -
TRACE打印中文时输出_CrtDbgReport: String too long or IO ErrorThe program的解决办法
<br /> 今天在用TRACE语句输出文件名的时候,发现输出结果是_CrtDbgReport: String too long or IO ErrorThe program,再仔细看看,string长度并不长,但是包含有中文,再到网上搜一下,果然TRACE在处理中文输出时会出现问题。<br /> <br /> 解决办法如下:<br /> <br /> <br /> 包含头文件locale.h,<br /> 并在程序开始调用setlocale(LC_ALL, "chs"原创 2010-09-01 12:56:00 · 4431 阅读 · 2 评论 -
对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决
<br /><br /><br /> 今天在调试程序中发现了程序中出现的一个问题,具体如下:<br /><br /><br /> 在对话框中新建一个线程worker thread,当用户点击cancel时,通知该线程函数退出,同时用WaitForSingleObject等待该线程结束。但是每当用户点击Cancel后,程序会卡在OnCancel函数中的WaitForSingleObject处,必须要强制结束才能退出。<br /><br /><br /> 在网上查了一下,大致原因如原创 2010-09-09 20:28:00 · 18188 阅读 · 10 评论 -
在DLL中接收系统消息的办法
程序中需要在DLL中接收系统消息,在网上搜了搜,总结出两种方法: 1. 建立一个隐藏窗口 在程序开始的时候创建一个隐藏窗口,注意这个窗口必须是无模式窗口,这样才能隐藏起来不干扰正常操作。在窗口中添加消息响应函数即可。 2. 全局钩子函数 这个办法暂时没有原创 2009-12-24 16:59:00 · 2212 阅读 · 3 评论 -
DLL中导出全局变量的方法及导入时需要注意的问题
今天做程序需要导出DLL中的一个全局指针,可是导出后只要一使用就会发生access violation,后来在网上找了找文章,原来是之前导入方法存在问题,下面把整个DLL导出导入全局函数的方法整理一下,作为记录。整个文章大部分参考http://www.pconline.com.cn/pcedu/empolder/gj/vc/0509/699672_7.html,这篇文章写的很不错,有兴原创 2009-12-22 14:37:00 · 10438 阅读 · 0 评论 -
WinSock TCP keepalive的机理及使用
<br /> <br /><br />TCP是面向连接的,在实际应用中通常都需要检测对端是否还处于连接中。如果已断开连接,主要分为以下几种情况:<br /> <br />1. 连接的对端正常关闭,即使用closesocket关闭连接。<br />2. 连接的对端非正常关闭,包括对端异常关闭,网络断开等情况。<br /> <br /> 对于第一种情况,很好判断,但是对于第二种情况,可能会要麻烦一些。在网上找到了一些文章,大致有以下两种解决方法:<br />原创 2010-11-24 13:44:00 · 16858 阅读 · 5 评论