C-C++
文章平均质量分 70
tomwillow
这个作者很懒,什么都没留下…
展开
-
在Visual Studio里利用pdb文件进入lib调试方法
1. 基础知识静态库和动态库首先说一下,库的导出分为静态库和动态库。导出静态库的话,会生成一个.lib文件,其实就是.obj的集合,.obj又是.cpp编译得到的,所以,静态库里有函数的实现。不过这些实现是二进制的,是不带源码的。使用静态库的时候,需要链接.lib,包含.h。导出动态库的话,会生成.dll文件和.lib文件,动态库生成的.lib文件会很小,因为这里的.lib只需要指明函数在.dll中的位置就可以了。使用的时候,需要把.dll和程序将要生成的.exe放在一个位置(双击exe运行),或原创 2021-07-01 16:24:44 · 4515 阅读 · 0 评论 -
关于我是怎么找到MSVC的STL库的std::this_thread::sleep_for是怎么实现的这件事
直接从VS里转到定义今天阅读C++ Concurrency in Action 2nd Edition-2019,看到第四章:std::this_thread::sleep_for(std::chrono::milliseconds(100));突然好奇,这个sleep_for和windows api的Sleep有什么区别?右键,转到定义:发现sleep_for是调用的sleep_until。里面又有一个_Thrd_sleep。又追。进入xthreads.h,阿勒,这里只有声明没有定义呢。原创 2021-01-12 17:34:47 · 1241 阅读 · 3 评论 -
cmake生成涉及bullet库报错“Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY“解决方法一则
这几天在编译一个工程(https://github.com/benikabocha/saba),里面涉及到了bullet库和glfw库,glfw倒还好说,唯独bullet把人折磨得够呛。用cmake-gui进行configure,报错:CMake Error at D:/SOFTWARE/Program/CMAKE/cmake-3.17.0-rc3-win64-x64/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (me原创 2021-01-08 00:17:18 · 1366 阅读 · 2 评论 -
VS2019怎样编译出可以在WinXP上运行的exe?
1 打开Visual Studio Installer点“更多”-“修改”。点“单个组件”,在“编译器、生成工具和运行时”下面找到“对 VS 2017 (v141)工具的 C++ Windows XP 支持 [已弃用]”。选中,右边会出现两个待安装的项目,第2个对第1个是依存关系,不能单独安装。这两个加起来有900MB多,我这边已经装过了,所以截图显示的0KB。2 启动VS2019以一个Win32 SDK原生窗口hello world为例:#include <windows.h>原创 2020-11-17 14:36:47 · 12570 阅读 · 11 评论 -
使用Win32 API获得端口占用列表并关闭对应进程
获得端口占用可以用命令netstat -ab实现,结束进程可以用taskkill,但是用C++怎么实现呢?答案是Windows已经提供了API实现功能。GetTcpTable可以得到当前占用的端口数量以及具体的ip和端口,但是得不到对应的进程。GetTcpTable2可以额外获得占用端口对应进程的pid,拿到pid,后面问题就好办了。下面是效果图:源码:#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>#inclu原创 2020-08-13 18:25:18 · 1551 阅读 · 7 评论 -
通过识别Content-Length和Transfer-Encoding实现C++ socket正确接收HTTP数据
众所周知,HTTP在运输层是TCP协议,所以在socket编程中,一般是初始化socket,解析ip,connect,send,recv的步骤。send请求头倒是容易,但在recv时就会发生问题。recv需要传入一个接收大小,但在HTTP协议中,头部并没有包大小,所以这个大小一般作为缓冲区大小使用,例如传入1024 bytes这种。HTTP丢包的问题首先我以为通过判断recv返回值,可以得知包是否接收完全,但实践发现,这种方式会产生丢包。例如,包大小实际是2000 B,在第一次recv时,接收到了1原创 2020-06-29 20:14:17 · 1122 阅读 · 0 评论 -
由于.manifest引起的VS2019编译x64 ATL C++窗口程序时报错“应用程序无法正常启动0xc000007b”
今天把一个ATL C++程序改成64位,结果一编译就报错“应用程序无法正常启动0xc000007b”。这种情况一般是链接库的问题,用depends查看,发现一大堆 API-MS-WIN-***.dll 找不到。非常疑难杂症了。我想到可能是编译器的问题,链接了错误的dll,就开以前的64位程序进行编译,但都是正常的。这就排除了装c++ runtime的想法,肯定不是c++ runtime的问题。后面我看到有人说是 winsock2.h 和 windows.h 存在包含顺序的问题:使用Qt库时出现win原创 2020-05-24 12:34:17 · 1092 阅读 · 0 评论 -
C++中UTF-8, Unicode, GB2312转换及有无BOM相关问题
UTF-8转Unicode首先,UTF-8和Unicode是有转换关系的,我们假设UTF-8字符串没有BOM。 wstring UTF8toUnicode(const string &input) { int state = 0; unsigned char temp; wchar_t wc; wstring wstr; for (unsigned char c ...原创 2019-05-03 15:28:29 · 1038 阅读 · 0 评论 -
VS2013编译能在WinXP运行的ATL程序
VS2013编译ATL程序在WinXP上运行的设置和SDK程序差不多。总结一下吧。配置属性 - 平台工具集:要设置成 Visual Studio 2013 - Windows XP (v120_xp),否则报“不是正确的Win32程序”。C/C++ - 运行库:要设置成 多线程(/MT),设置成 **多线程调试(/MTd)**也可以,但因为带了调试信息,文件要大得多。别的带dll的选项需要...原创 2018-10-05 22:08:56 · 332 阅读 · 0 评论 -
记leetcode中提高运行速度的奇技淫巧与其计时不准确性
在看leetcode中别人的代码时,发现了一段奇怪的东西:static auto x = []() { std::ios::sync_with_stdio(false); std::cin.tie(0); return 0;}();这是什么玩意儿? 里面sync那句是解除cin与stdin的同步,加快读入数据的。tie(0)那句是解除cin与cout的绑定,...原创 2018-08-10 00:58:24 · 4131 阅读 · 0 评论 -
C++ STL求全排列和组合
C++11 STL内置了求全排列的模板函数next_permutation和prev_permutation,属于头文件和std命名空间,使用非常方便。例如:vector&lt;int&gt; A{1,2,3,4,5};while (next_permutation(A.begin(),A.end()){ cout&lt;&lt;A[0]&lt;&lt;A[1]&lt;&a原创 2018-07-20 16:00:12 · 6558 阅读 · 0 评论 -
勾股数圆整程序
今天建模,遇到要勾股数圆整。 然后就写了一个小程序来圆整。#include <iostream>using namespace std;int main(){ double a, b, c; double epsilon; cout << "Please input the a,b,c:" << endl; cin >> a >> b >> c; fo原创 2016-09-28 11:02:52 · 364 阅读 · 0 评论 -
缓慢的setfill和setw函数
最近在做数据结构的题,https://pta.patest.cn/pta/test/1342/exam/4/question/19210 这个题怎么写都超时,然后就从各个角度抠时间。原因找遍,估计是setfill和setw函数占用时间比较多,改为printf后立马就通过了。例如: cout<<setfill('0')<<setw(5); cout<<A[i].Addr;原创 2016-09-21 21:56:24 · 655 阅读 · 0 评论 -
C++改写成C中若干问题处理(eg.error C2275)
最近把我之前写的2048游戏从.cpp改成.c,编译器报了若干个错,在处理过程中进一步了解了C++和C的区别,总结如下:1.报错error C2275 将此类型用作表达式非法:这个提示信息非常无厘头,其实原因就是C里面变量声明必须在函数的头部,全部声明完了才能开始干活,把出错的变量声明挪到前面就好了。如果是位于switch的case里面,把case里面的东西用{}包起来,在{刚开始的部分声明就好了。原创 2016-09-21 10:42:20 · 693 阅读 · 0 评论 -
VS下使用freopen重定向输入流至文件同时使用system("pause")暂停
在调试程序时可以使用freopen重定向输入流至文件:freopen("a.txt","r",stdin);但这样system(“pause”)就失效了,程序一闪而过,看不到输出结果。 解决方法为在system前面加上freopen("CON","r",stdin);把输入流重定向回控制台,此时暂停有效。原创 2016-09-11 22:02:28 · 1877 阅读 · 2 评论