
windows
ningto.com
个人站点:https://ningto.com
展开
-
win32应用程序内存不足
当在windows环境运行32位应用程序时,由于32位的限制最大分配的内存只有2G。要想使用更大的内存正常情况下编译为64位就可以了。但是如果程序依赖的库比较多,其他库也需要编译成64位,这样做起来比较麻烦。下面介绍一个更简单的做法,还是32位程序,只需要修改工程属性重新编译一下就可以了。visual studio工程属性设置:右键工程,属性链接器系统启用大地址,选择“是”这样就可以了,你可以试试。...原创 2021-01-14 07:40:01 · 1164 阅读 · 0 评论 -
log4cxx OutputDebugString DebugView dbgview
log4cxx常用appender有ConsoleAppender输出到控制台,RollingFileAppender输出到文件。在GUI程序中使用log4cxx时,要想能实时看到输出日志一般用windows函数OutputDebugString,log4cxx console appender是显示不出来的。所以如果log4cxx的日志能向OutputDebugString一样输出就好了,没想到还真有这样一个appender,如下配置就能实现了,这样就可以用vs输出窗口或者DebugView工具实时看原创 2021-01-12 07:51:10 · 284 阅读 · 0 评论 -
根据错误码获取错误信息,读写文件
CString GetErrorString(int errCode, LPTSTR name = NULL){ CString ret; LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,原创 2014-01-04 12:34:12 · 3327 阅读 · 0 评论 -
opencv图片转换为avi格式视频
由于代码文件很多,想找一下哪个文件里有中文就简单的写了一下程序。BOOL IsRoot(LPCTSTR lpszPath){ wchar_t szRoot[4]; wsprintf(szRoot, L"%c:\\", lpszPath[0]); return (lstrcmp(szRoot, lpszPath) == 0); }void FindInAll(LPCTSTR lp原创 2013-10-27 16:23:04 · 2394 阅读 · 0 评论 -
win32图片按钮
win32简单的动态创建的图片按钮,加载两幅图片,单击的时候替换。#pragma onceclass ImageButton{public: ImageButton() : m_hwnd(0) , m_status(true) { } ~ImageButton() { if (m_hwnd) { ::DestroyWindow(m_hwnd); }原创 2013-10-24 19:45:54 · 3871 阅读 · 0 评论 -
使用winrar打包文件
#include #include #include #include std::wstring GenerateBakDir(const std::wstring &srcDir){ std::wstring bakDir; if (srcDir.empty()) { return bakDir; } time_t curTime = time(0); tm tim原创 2013-09-03 20:49:47 · 847 阅读 · 0 评论 -
WSAEventSelect模型
客户端程序:需要注意的是WSAWaitForMultipleEvents只能支持由WSA_MAXINUM_WAIT_EVENTS对象规定的一个最大值为64,因此最多只能支持64个套接字。对于写服务端程序而言是一大缺点。#pragma once#include #include #include #include #include class TcpClient{原创 2013-05-01 20:35:07 · 1067 阅读 · 0 评论 -
select模型
需要注意的是要将listenSock设置为非阻塞模式,这样在while(1)循环中accept才不会被阻塞。同时listenSock也要set到fdread中,如果不这样做的话,select只能监视到客户端的socket,当客户端没有进行任务IO操作的时候select返回值为SOCKET_ERROR会一直进行循环检测,这样是没必要的。如果有listenSock在fdread中,而又没有新的客户端接原创 2013-04-21 19:37:26 · 1000 阅读 · 0 评论 -
获取本地IP和子网掩码
#include #include #include #include #pragma comment(lib, "Ws2_32.lib")#pragma comment(lib, "IPHLPAPI.lib")std::string GetMaskFromIp(const std::string &ip){ std::string ret; PIP_ADAPTER_INF原创 2013-07-27 11:11:40 · 4225 阅读 · 0 评论 -
带对话框的dll
1.新建项目 -> Visual C++ -> MFC -> MFC DLL -> 如名字:Test2.打开工程的资源视图 -> 在Test.rc上右键添加资源 -> 对话框 -> 新建3.在对话框上右键单击弹出菜单 -> 添加类 -> 类名MyDlg,基类CDialog4.新建TestAPI.h和TestAPI.cpp文件,内容如下:TestAPI.h:#pragma onc原创 2013-03-26 22:26:53 · 967 阅读 · 0 评论 -
多线程异步TCP客户端实现
其中使用到的其他头文件地址:线程:http://blog.youkuaiyun.com/tujiaw/article/details/8795014阻塞队列:http://blog.youkuaiyun.com/tujiaw/article/details/8779466消息:http://blog.youkuaiyun.com/tujiaw/article/details/8665610#define DISALL原创 2013-04-12 20:52:43 · 1817 阅读 · 0 评论 -
win32 空心对话框
在init dialog里加入: HWND currentWnd = this->GetSafeHwnd(); RECT rcSrc, rcMid; ::GetWindowRect(currentWnd, &rcSrc); int space = 20; rcMid.left = rcSrc.left + space; rcMid.top = rcSrc.top + space;原创 2013-10-29 23:09:36 · 882 阅读 · 0 评论 -
visual stdio不同目录下的文件重名,类重名问题解决方法
以下测试是在vs2008和vs2012中进行的先建一个空的Test控制台应用程序,目录结构如下:temp1目录下有两个文件:hello.h, hello.cpp// temp1, hello.h#pragma onceclass Hello{public: Hello();};// temp1, hello.cpp#include "hello.h原创 2013-12-07 19:30:35 · 6435 阅读 · 1 评论 -
ansi unicode utf8之间的转换
std::wstring ansi2unicode(const std::string& ansi){ if (ansi.empty()) { return std::wstring(_T("")); } int len = MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), -1, NULL, 0); wch原创 2013-03-23 08:33:55 · 839 阅读 · 0 评论 -
windows阻塞队列
#ifndef SPEND_BLOCKQUEUE_H_#define SPEND_BLOCKQUEUE_H_#include #include #include #include "Def.h" // for DISALLOW_COPY_AND_ASSIGNtemplateclass BlockQueue{ DISALLOW_COPY_AND_ASSIGN(BlockQueu原创 2013-04-09 20:15:27 · 2334 阅读 · 6 评论 -
枚举句柄
#include #include #include static const int s_max = 1024;BOOL CALLBACK EnumWindowsProc(HWND, LPARAM);BOOL CALLBACK EnumChildWindowsProc(HWND, LPARAM);int main(){ EnumWindows(EnumWindowsProc原创 2015-04-28 23:10:35 · 761 阅读 · 0 评论 -
windows任务栏高亮
void startAlert(HWND hwnd, int durationMs, int timeoutMs){ FLASHWINFO info; info.cbSize = sizeof(info); info.hwnd = hwnd; info.dwFlags = FLASHW_TRAY; info.dwTimeout = timeoutMs;原创 2015-01-20 22:50:03 · 2752 阅读 · 0 评论 -
进程间锁
class GlobalMutexLock{public: GlobalMutexLock(LPCWSTR name) { m_handle = CreateMutex(NULL, false, name); } ~GlobalMutexLock() { CloseHandle(m_handle); } void lock() { WaitForSingleOb原创 2014-11-16 22:36:52 · 1709 阅读 · 0 评论 -
windows日志实现
#pragma once#include class Logger{public: enum LogLevel { TRACE, DEBUG, INFO, WARN, ERROR, FATAL, LOGLEVEL_COUNT }; Logger(const char *file, int line); Logger(const char *file原创 2014-10-30 19:29:38 · 698 阅读 · 0 评论 -
Windows dump
#ifndef CRASHHOOK_H#define CRASHHOOK_H#include class ApplicationCrashEvents{public: virtual void onCrash(const std::string &dumpPath) = 0;};class CrashHook{public: explicit CrashHo原创 2014-07-12 11:59:13 · 740 阅读 · 0 评论 -
hook给应用程序窗口加边框
tcpdump filters:http://www.cs.ucr.edu/~marios/ethereal-tcpdump.pdf boost书籍http://en.highscore.de/cpp/boost/index.htmlboost asio用法http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-原创 2014-03-31 23:29:47 · 2033 阅读 · 0 评论 -
WSAAsyncSelect模型
这个模型跟窗口有关,它使用消息来进行通知的。如下是对话框客户端关键代码,连接的是一个echo服务端。首先,自定义一个消息WM_MYSOCKET,消息响应函数OnMySocketMessage,新建两个CListBox控件用来显示发送和接受数据,分别是:m_ctrlSend, m_ctrlRecv;// 产生随机字符串std::string BuildRandString(int nu原创 2013-04-21 22:09:43 · 1065 阅读 · 0 评论 -
显示加载DLL封装
#ifndef DYNALINK_H_#define DYNALINK_H_#include #include class DynaLink{public: DynaLink() : hDll_(NULL) { } DynaLink(const std::wstring &name) : hDll_(NULL) { open(name); } vi原创 2013-04-24 17:46:05 · 811 阅读 · 0 评论 -
Windows线程简单封装
#ifndef SPEND_THREAD_H_#define SPEND_THREAD_H_#include "Def.h"#include #include typedef std::tr1::function ThreadFunc;class Thread{ DISALLOW_COPY_AND_ASSIGN(Thread);public: explicit Thread原创 2013-04-12 20:43:54 · 1430 阅读 · 0 评论 -
内存映射文件
#include "stdafx.h"#include <locale.h> // add for unicode#include <windows.h>#include <iostream>using namespace std;int _tmain(int arg原创 2011-05-12 19:43:00 · 674 阅读 · 0 评论 -
32位到64位程序移植
前段时间一直弄关于32位到64位程序移植的问题, 终于结束了, 所以在这里做一下小结。 其实对于一般的32位应用程序64位操作系统都是兼容的, 只有一些特殊的需要与64位应用程序进行交互的才需要编译成64位, 不然会出现不兼容的问题。因为我移植的是输入法, 这里原创 2011-03-09 00:23:00 · 6894 阅读 · 3 评论 -
WebBrowser控件判断页面加载完毕
大家都知道DWebBrowserEvents2 Members的DocumentComplete(Fires when a document is completely loaded and initialized)成员的作用。但是实际上直接到它里面处理加载完成后的事件是不行的,原创 2011-07-14 11:11:44 · 3881 阅读 · 2 评论 -
静态库(lib)的编写与调用
静态库的编写:1.新建一个Win32 Console Project命名为LibAdd, Application type选中Static library(可以去掉Precompiled header的勾选), 然后点finish;2.增加一个头文件LibAdd.h和一个源文件L原创 2011-07-15 16:21:43 · 1127 阅读 · 0 评论 -
内存对齐 - 求结构体大小
一、内存对齐的原因大部分的参考资料都是如是说的: 1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未原创 2011-07-09 23:33:09 · 916 阅读 · 0 评论 -
windows下进程间通信方式介绍
作者:李志刚 纪玉波 程小茁 崔朝辉摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提转载 2011-07-06 15:50:13 · 5866 阅读 · 1 评论 -
SOCKET中宽字符问题
今天正在看孙鑫老师vc++16课的一个聊天程序视频教程,按照上面做了一下但遇到两个小的问题,最后解决了所以记录下。当你的编译器用的是unicode字符集的话就会出现我遇到的这两个问题。 1.从ip地址控件上获取的值经过inet_ntoa转换为网络字节序后在接收端显示的时候是乱码:LRESULT CMFCCHATDlg::OnSock(WPARAM wParam, LPARAM原创 2011-06-05 11:05:00 · 3102 阅读 · 0 评论 -
让程序只有一个应用程序实例在运行
当一个应用程序正在运行的时候我们不希望双击这个应用程序的时候又开启一个新的运行实例, 而仅仅只需要激活先前的实例即可。下面介绍两种简单的方法, 都是在程序开始的时候加入代码:第一种方法: HWND hOldWnd = NULL; hOldWnd = ::FindWindowEx(NULL, NULL, NULL, OLD_WND_NAME); // define OLD_WND_NAME "先前窗口实例的名字" if (hOldWnd) { ::ShowWindow(hOldWn原创 2011-05-28 21:54:00 · 954 阅读 · 0 评论 -
SetWindowLongPtr and GetWindowLongPtr 用法 实例
SetWindowLongPtr与GetWindowLongPtr主要有两种用法:第一种是:改变指定窗口的属性;第二种是:设置一个值在额外存储空间的指定偏移位置。下面所说的是第二种用法:原创 2011-01-28 18:40:00 · 10605 阅读 · 0 评论 -
临界区 互斥量 信号量 事件
四种进程或线程同步互斥的控制方法 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事件:用来通知线程有一些事件已发生,转载 2011-05-24 10:15:00 · 822 阅读 · 0 评论 -
Win32 API笔记
1>创建一个非模式对话框:HWND hDlg;hDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, AboutDlgProc);//IDD_DIALOG1为资源文件中的对话框IDShowWindow(hDlg, SW_SHOW); 2>创建一个静态文本控件:HWND hStaticLabel;h原创 2011-01-12 10:43:00 · 1867 阅读 · 1 评论 -
当年的毕业设计 - MFC信息管理系统
由于程序只能在远程服务器上跑,调试起来非常麻烦,所以想弄一个UDP的日志服务程序,能实时的显示远程程序打印过来的日志。于是就想到了用MFC弄一个继承自CListView的单文档应用程序。 话说MFC还是我大学时候做毕业设计时用过, 距离现在都两年了,好多API也忘得差不多了。不过参照以前的毕业设计还是弄出来了。想来虽然当初编程水平不咋的,但是程序还是有一些参考价值。原创 2012-03-08 17:46:25 · 8083 阅读 · 5 评论 -
MFC 拷贝ListBox单行的数据到剪切板
由于从控件上得到的数据是宽字符,所以分配空间的时候需要注意的是单行数据长度要乘以2作为GlobalAlloc分配的大小void Show::OnLbnDblclkListResult(){ int curSel = m_listResult.GetCurSel(); CString str; m_listResult.GetText(curSel, str);原创 2013-04-12 20:41:04 · 2223 阅读 · 0 评论 -
windows下介绍一个简单的DebugView工具
在我们调试比较复杂的程序的时候,尤其是多个dll,多线程的情况下debug有时候不是很方便。debugview工具可以在我们需要的地方打下日志而且很方便实时的反应到界面上。下载地址:http://technet.microsoft.com/en-us/sysinternals/bb896647只需要使用windows API OutputDebugString就可以了。Sends原创 2013-03-23 09:12:28 · 1598 阅读 · 0 评论 -
windows std::cout设置输出颜色
包含头文件ConsoleColor.hstd::cout << red << "this text is read" << std::endl;std::cout // ConsoleColor.h#pragma once#include #include inline std::ostream& blue(std::ostream &s){ HANDLE hStd转载 2013-03-31 20:15:46 · 5037 阅读 · 0 评论 -
将可执行应用程序作为服务运行
将一个可执行应用程序作为一个服务,你的main函数就相当于此处的run,而这个run作为回调函数的一部分被执行。作为服务的程序一般不会是执行一遍就退出的,即run函数是会被阻塞的。如果你的run函数执行一次就退出的话,那么它不适合作为服务。怎样运行这个应用程序?1>编译出可执行文件.exe;2>运行->cmd->cd到exe目录;3>首先安装,MyService.exe i原创 2012-09-14 20:46:39 · 1042 阅读 · 0 评论