
VisualStudio、MFC与win32
文章平均质量分 75
bytxl
归零。
得意之时谨记,一半命运还掌握在上帝手里;失意之时须知,一半命运还掌握在自己手里。
不怕死,不找死。
展开
-
visual studio附加选项/Tc、/Tp、/TC、/TP(指定源文件类型)
/Tc 选项指定 filename 为 C 源文件,即使它没有 .c 扩展名。 /Tp 选项指定 filename 为 C++ 源文件,即使它没有 .cpp 或 .cxx 扩展名。 选项和 filename 之间的空格是可选的。 每个选项指定一个文件;若要指定其他文件,请重复此选项。/TC 和 /TP 是 /Tc 和 /Tp 的全局变量。 它们指定编译器将在命令行上命名的所有文件视为转载 2015-05-28 15:11:32 · 3588 阅读 · 1 评论 -
nmake使用以及windows上makefile编写
VC6.0其实已经不再使用makefile文件进行编译了,但是它仍然可以导出makefile文件,后缀名为*.mak,方法是在工程菜单下的导出makefile文件,你也可以将*.mak文件更名为makefile这样就可以只使用nmake进行编译而不用再在后面带参数([/f makefile] )。 剩下的工作就是进入该工程文件所在的路径,然后执行makefile命令,然后再将生转载 2015-06-01 19:01:12 · 8156 阅读 · 0 评论 -
理解 __declspec(dllexport)和__declspec(dllimport)
这段时间要把tinyxml从静态库弄成动态库,要用到__declspec(dllexport)和__declspec(dllimport)来导出dll和lib文件。终于弄明白了export和import的作用,下面从使用的角度来说明一下他们的功能。 首先要知道,头文件是C++的接口文件,不仅本工程需要使用头文件来进行编译,给其他工程提供dll的时候也要提供此dll的头文件才能让其他人通过转载 2015-06-01 17:05:16 · 8090 阅读 · 3 评论 -
VS2013编译64位OpenSSL(附32位)
安装ActivePerl这个没什么好说的,直接运行msi即可。编译OpenSSL1.使用Visual Studio Tool中的“VS2013 x64 本机工具命令提示”来打开控制台;也可以打开一个控制台,然后进到“安装路径\Microsoft Visual Studio 12.0\VC\bin\amd64\“中运行vcvars64.bat;2.解压下载下来的o转载 2015-06-01 19:15:59 · 2412 阅读 · 0 评论 -
VS2013多线程程序卡住以及各种异常的调试
多线程程序使用了锁,当卡住时,可以如下调试:点击“调试/全部中断”然后在“线程”窗口会显示当前运行的各个线程,以及他们的堆栈信息。这样就可以查看各个线程卡在哪里了。原创 2015-06-17 15:32:48 · 7821 阅读 · 0 评论 -
PostMessaget与ON_MESSAGE
PostMessage是Windows API(应用程序接口) 中的一个常用函数,用于将一条消息放入到消息队列中。函数功能 该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。 消息队列里的消息通过调用GetMessage和PeekMessage取得。原型与参数 函数原型:B0转载 2015-05-11 14:05:26 · 649 阅读 · 0 评论 -
Unicode下CString和char *之间的互相转换
CString中存储的字符的数据类型为wchar_t类型。一、CString转换为char *(1)方法一:使用wcstombs()[cpp] view plaincopy#include using namespace std; #include int main() { CStri原创 2015-06-08 14:17:20 · 765 阅读 · 0 评论 -
ATL字符串转换宏
有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏,你相信吗?头文件d:/program files/microsoft visual studio 8/vc/atlmfc/include/atlconv.h如果要使用ATL字符串转换宏,请先定义USES_CONVERSION; // 只需要调用一次,就可以在函数中进行多转载 2015-06-08 14:21:36 · 746 阅读 · 0 评论 -
VisualStudio中添加LIb库、头文件、宏等常用配制
在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。 2、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。注意:如果不添加目录,VS访问的默认库路径是当前工程的目录(原创 2015-05-28 09:18:59 · 3554 阅读 · 0 评论 -
A2W和W2A :很好的多字节和宽字节字符串的转换宏
以前看《Window核心编程》,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。近日接触了ATL的一个很好的字符串的转换宏:A2W和W2A。 用法很简单,A2W的用法: #include DoSomething(LPWSTR st转载 2015-06-03 13:40:15 · 1865 阅读 · 0 评论 -
Win32 UDP Socket通信学习
学习内容,参见《Windows网络编程》第7章 Winsock基础 与TCP流式协议不同,UDP为数据报协议。 服务端接受数据,客户端发送数据。UDP服务端流程Socket或WSASocket建立套接字,用SOCK_DGRAM标志。bind绑定到IP地址和端口。recvfrom/WSARecvFrom接受数据。 UDP转载 2015-06-18 16:25:50 · 3753 阅读 · 0 评论 -
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
首先,确定自己的代码正确,线程函数正确退出后,报这个错,最后发现线程函数是这么定义:static DWORD WINAPI ServerWork(LPVOID lpParameter)其中WINAPI为:#define WINAPI __stdcall把WINAPI去掉就好了。解析:主模块在调用Dll的导出函数时会保存返回地址在堆栈中(ESP+xxx)。函原创 2015-06-22 10:31:19 · 2469 阅读 · 0 评论 -
如何正确的关闭 MFC 线程
前言: 近日在网上看到很多人问及如何关闭一下线程,但是我看网上给出的并不详细,而且有些方法还是错误的。小弟在此拙作一篇,不谈别的,只谈及如何正确的关闭MFC的线程,至于Win32和C RunTime的线程暂不涉及。一.关于MFC的线程 1.MFC的线程有两种,一种称为Work线程,一种称为UI线程。一般情况下Work线程与UI线程的区别主要在于UI线程有消息队列(并不是转载 2015-06-19 17:12:00 · 802 阅读 · 0 评论 -
临界区锁 InitializeCriticalSection()--- EnterCriticalSection()--LeaveCriticalSection()
1、InitializeCriticalSection此函数初始化一个临界区对象。格式:void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection);参数:lpCriticalSection指向临界区对象的指针。返回值:无 单个进程的转载 2015-06-17 17:22:03 · 1463 阅读 · 0 评论 -
MFC 启用和禁用控件
启用和禁用控件可以调用CWnd::EnableWindow 函数。BOOL EnableWindow(BOOL bEnable = TRUE);判断控件是否可用可以调用 CWnd::IsWindowEnable函数BOOL IsWindowEnable(); 禁用控件CWnd *pWnd = GetDlgItem(IDC_EDIT1);pWnd-转载 2015-06-18 15:14:30 · 5324 阅读 · 0 评论 -
MFC全局函数AfxBeginThread 及其与CreateThread的区别
MFC全局函数AfxBeginThread 及其与CreateThread的区别afxbeginthread createthread函数功能描述:创建新的线程函数原型:CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc/*线程函数地址*/,转载 2015-06-18 13:56:24 · 1450 阅读 · 0 评论 -
MFC关于Radio按钮的操作
先为对话框加上2个radio button,分别是Radio1和Radio2。问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,第一种:((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上((CButto转载 2015-06-18 15:05:52 · 1215 阅读 · 0 评论 -
linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别
UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。linux: struct timeval timeout={3,0};//3s int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeo转载 2015-06-19 17:39:19 · 5005 阅读 · 0 评论 -
CloseHandle(),TerminateThread(),ExitThread()的区别
线程的handle用处:线程的handle是指向“线程的内核对象”的,而不是指向线程本身.每个内核对象只是内核分配的一个内存块,并且只能由内核访问。该内存块是一种数据结构,它的成员负责维护对象的各种信息(eg: 安全性描述,引用计数等)。CloseHandle()在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,Cl转载 2015-06-19 17:27:36 · 494 阅读 · 0 评论 -
error C2054:在“inline”之后应输入“(
按照编译错误的提示来看应该是编译器没有识别inline参数。查阅了一下inline是c++里面的东西,在c里面使用是会发生错误。 解决办法就是将inline修改为__inline或者在mapserver.h中增加了如下的定义: #define inline__inlinehttp://blog.sina.com.cn/s/blog_4e668bc8010转载 2015-06-01 15:26:05 · 4609 阅读 · 0 评论 -
VS2008解决“MSVCRT”与其他库的使用冲突的警告
警告信息如下:1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library原因:在使用多线程调试dll(MDd)模式的时候 msvcrtd.lib 与 ibcmt.lib产生冲突解决方法有2个:1.右击工程 - 属性 ”配置属性 - 链接器 -转载 2015-06-02 09:56:07 · 915 阅读 · 0 评论 -
Windows上编译最新的CURL,含有zlib,openssl
最近,从网上下载了一个curl库,使用时各种报错,都无法启动,于是干脆就直接自己编译了。 1. 准备工作 a. 下载zlib zlib可以使得HTTP请求支持gzip压缩,其地址如下: 官网:http://zlib.net/ 下载地址:http://zlib.net/zlib-1.2.8.ta转载 2015-06-01 19:16:05 · 1690 阅读 · 0 评论 -
msvcp110.dll 遺失解決
電腦重灌後,原本可以玩的遊戲和程式因為出現警告視窗:【msvcp110.dll 遺失】不的不上網求助各位神人,但看了所有的方法還是都沒辦法解決我的問題,只好用自己的方法找答案,搞了一個晚上,火影電腦版的遊戲終於可以玩,FLASH_CS6也可以使用,很多遊戲和程式都是需要一種程式就是 Visual Studio Visual C++的套件,但版本很多,我不會寫程式,也转载 2015-07-01 15:15:32 · 926 阅读 · 0 评论 -
lib和dll中全局变量的链接性及用法总结
今天在公司干完活后思考了lib和dll的链接性,然后做了测试,发现和我想象的不大相同,具体总结如下:lib: lib中的全局变量在链接它的单元中是可以通过extern访问到的,但是链接它的单元如果定义了一个相同的全局变量那么lib中的全局变量将被忽略,而且不会出现重复定义的错误。lib中的函数则不相同如果链接它的单元有了相同的函数就会发生重复定义。在lib的cpp中定义一个静态的变量会被所有用转载 2015-07-01 09:03:18 · 1788 阅读 · 0 评论 -
Building an MFC project for a non-Unicode character set is deprecated
VS2013多字节工程问题使用VS2013编译旧版VC++程序时,提示Building an MFC project for a non-Unicode character set is deprecated,微软提供了解决方案。一、错误信息[cpp] view plaincopyprint?"font-famil转载 2015-10-28 10:42:21 · 682 阅读 · 0 评论 -
在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
症状当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNK2005 错误之一:nafxcwd.lib(afxmem.obj) :error LNK2005:"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z) alreadydefined in LIB转载 2015-10-28 11:06:08 · 647 阅读 · 0 评论 -
error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
本文主要分析和解决编译链接时产生的 LNK2005 错误。【错误信息】: mfcs90ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)【分析原因】: 这篇文章:《在Visual C++中以错误的顺序链接CRT库和MFC转载 2015-10-28 11:01:48 · 1290 阅读 · 0 评论 -
手把手教你用CAB发布OCX的简单办法
CAB是一种文件压缩格式,把OCX文件(ActiveX插件)压缩成CAB文件是为了发布它,这种发布方式给人感觉“浏览器会自动安装该插件”,很多朋友钟情于此。目前流行很多压缩工具,但WINRAR这类工具生成的CAB文件浏览器无法识别。经过试用,发现用Windows系统文件CABARC来制作CAB是最简单有效的办法,下面以打印控件Lodop为例,一步步了解制作CAB文件和部署发布的过程转载 2012-05-22 11:46:06 · 3685 阅读 · 0 评论 -
VS错误:This function or variable may be unsafe
使用VS会出现'scanf': This function or variable may be unsafe. Consider using scanf_s ins这种错误,这是新版vc库添加的警告因为微软认为scanf的使用存在安全隐患,因为C/C++中的字符串处理都是以\0为截止符的,如果搜索不到\0,容易出现字符串越界所有vc扩展的所谓安全标准库,都添加了一个参数用以指定字符串参数的长度,转载 2016-01-21 09:05:09 · 941 阅读 · 0 评论 -
cygwin和mingw的区别
Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的。但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库。 但是,这些API的功能在win32中也能实现转载 2015-12-03 16:16:44 · 563 阅读 · 0 评论 -
visual studio运行时库MT、MTd、MD、MDd的研究
Visual studio配置:项目属性 -> 配置属性 -> C/C++ -> 代码生成 -> 运行库。在开发window程序是经常会遇到编译好好的程序拿到另一台机器上面无法运行的情况,这一般是由于另一台机器上面没有安装响应的运行时库导致的,那么这个与编译选项MT、MTd、MD、MDd有什么关系呢?这是msdn上面的解释:MT:mutithread,多线程库,编译器会从运行时库里转载 2016-01-23 09:40:43 · 776 阅读 · 0 评论 -
windows常用系统库
ws2_32.lib如果没有链接,会报如下错:error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _wmain 中被引用error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 _wmain 中被引用error LNK2019: 无法解析的外部符号 __imp__accept@12,该符号原创 2015-05-28 09:36:28 · 3655 阅读 · 1 评论 -
__unaligned
When you declare a pointer with the __unaligned modifier, the compiler assumes that the pointer addresses data that is not aligned. Consequently, for an application that targets an Itanium Processor F转载 2015-12-23 15:04:10 · 1927 阅读 · 0 评论 -
/Gs(控制堆栈检查调用)
控制堆栈探测。/Gs[size]参数size(可选)在启动堆栈探测之前局部变量可以占用的字节数。 如果在不指定 size 参数的情况下指定 /Gs 选项,则这与指定 /Gs0 的效果相同。备注堆栈探测是编译器插入到每个函数调用中的转载 2015-09-08 13:39:54 · 1603 阅读 · 0 评论 -
Windows系统版本宏_WIN32_WINNT对应值
win7_WIN32_WINNT>=0x0601vista_WIN32_WINNT>=0x0600Windows XP_WIN32_WINNT>=0x0501 Windows 2000_WIN32_WINNT>=0x0500 Windows NT 4.0_WIN32_WINNT>=0x0400 Windows Me转载 2015-09-08 11:06:57 · 2102 阅读 · 0 评论 -
浅析_tmain()与main()的区别
_tmain()是为了支持unicode所使用的main一个别名,既然是别名,应该有宏定义过的,在哪里定义的呢?就在那个让你困惑的里,有这么两行:#include #include 我们可以在头文件里找到_tmain的宏定义#define _tmain main所以,经过预编译以后, _tmain就变成main了main()是标准C++的函数入口。标准C++的程序转载 2015-08-15 15:48:25 · 533 阅读 · 0 评论 -
windows安全警告与SDL检查
Visual Studio开启了SDL检查后,某些警告会成为错误,是程序编译不通过,例如:error C4703: 使用了可能未初始化的本地指针变量error C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. Se原创 2015-07-01 09:17:21 · 21025 阅读 · 1 评论 -
PDB符号文件与Windows下利用Windbg 分析dump
PDB简介跟踪提供程序(例如应用程序或驱动程序)的程序数据库 (PDB) 符号文件包含用于对跟踪消息设置格式的指令,以便可以按照用户可读的形式显示这些消息。跟踪消息格式设置指令属于跟踪提供程序源代码的一部分。 WPP 预处理器从代码中提取这些指令并将其添加到跟踪提供程序的 PDB 符号文件。当你编译调试(已检验)版本的跟踪提供程序时,编译器生成 PDB 文件。默认情转载 2015-07-02 10:17:42 · 13973 阅读 · 0 评论 -
__cdecl __stdcall __fastcall区别
一、三者区别一览表 __stdcall__cdecl__fastcall参数传递方式右->左 压栈右->左 压栈左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送清理栈方被调用函数清理(即函数自己清理转载 2015-06-22 17:11:27 · 564 阅读 · 0 评论 -
链接静态库时__imp_前缀错误
visual studio 中链接静态库, 出现找不到 __imp_函数名 的错误, extern "C"也增加了 找到一段 Logically, the next question to ask is how to get the optimized form. The answer comes in the form of a hint you give to转载 2015-07-01 09:02:43 · 4140 阅读 · 0 评论