C/C++
文章平均质量分 67
l198738655
这个作者很懒,什么都没留下…
展开
-
已启用spectre缓存,但找不到spectre缓解库
把这个选项关了就行,但这样就需要每个项目都改一改这个比较麻烦,也可以补全缺失的库,打开Visual Studio在顶部菜单栏“工具”→“获取工具和功能”如果不需要在ARM CPU的机器上运行就不需要下ARM的库,只下X86 X64的库就行。原创 2023-05-30 10:24:38 · 678 阅读 · 2 评论 -
C++ MFC调用JS代码获取返回值
但简中网络上此组件的资料少之又少,鄙人也是拿来主义,用老前辈提供的一个操作msscript.dll的类来调用JS,特此写下这篇帖子记录使用过程,以免忘记,为以后再次使用提供说明。此操作类提供了从JS文件加载JS脚本的方法,估计是输入目标文件地址的处理有问题,也搞不清是哪里有问题,目前只有上面那个函数能用,鄙人的办法就是把JS脚本存在一个txt文件里,然后用API读出文件里的文本,在用上面的函数调用,效果也是差不多的。但是要注意txt文件里的JS脚本不能有换行,需要把JS脚本里的换行全部删除后才能成功调用;原创 2023-05-10 11:47:38 · 953 阅读 · 0 评论 -
C++ MFC调用易语言模块
易语言有很多现成的模块,我们都知道学编程祖师爷有个祖训:不要重复发明轮子。虽然我们当然应该不断学习扩展知识的边界,但也不能啥都自己亲力亲为,不能为了做个西红柿炒鸡蛋就自己从晒盐开始做起。 易语言其实没有自己的链接器,也就是把代码编译成二进制的可执行文件。易语言用的是VB或者VC++的链接器,所以可以在易语言里把模块内的函数也就是易语言称之为“子程序”的编译成DLL来给其他语言调用。 首先先给易语言装一个“黑月编译器”,如图:去随便搜一个来装起来就行,最好用手工安装包,自动安装包有时候会装不上,不原创 2022-07-03 18:54:08 · 2535 阅读 · 0 评论 -
Visual Studio 2017配置DX9开发环境(包含MFC)
首先去微软下载DXSDK_Jun10开发包,图标是这个样子:然后打开项目属性,选择“VC++目录”,选择“包含目录”,添加:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include如果你的DXSDK是默认目录安装,那就是这个目录。然后选择“库目录”,添加:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86如果要编译.原创 2022-02-12 12:22:37 · 1414 阅读 · 0 评论 -
VS2019 设置使用 CTRL+/ 注释和取消注释
1.点击“工具->选项”。2.点击左边菜单“环境->键盘”。3.在命令搜索框输入“注释”。4.移除现有切换行注释的快捷键,并移除冲突的快捷键。5.重新分配快捷键。...转载 2021-12-29 10:41:15 · 3112 阅读 · 0 评论 -
CString字符串查找和截取
本文总结CString Left()、Mid()、Right()以及几个跟CString字符串查找相关的函数使用,首先需要查找,CString里有如下几个查找函数,分别为Find()、ReverseFind()、FindOneOf()。一、CString之Find()、FindOneOf()、ReverseFind()此三个函数返回值均为整数int。1、Find()该函数从左侧0索引开始,查找第一个出现的字符位置,返回position。示例如下:CString ...转载 2020-06-13 19:08:24 · 1418 阅读 · 0 评论 -
MFC 字符串分割为数组
#include <vector>std::vector<CString> SplitCString(CString strSource, CString ch);//参数1:待分割的字符串;参数2:作为分割标志的字符串,比如以","号为标志分割字符串,就填","std::vector<CString> SplitCString(CString strSource, CString ch){ std::vector <CString> vec.原创 2020-06-13 12:49:55 · 1500 阅读 · 0 评论 -
MFC 2010 C++ A*寻路算法
因为要开发游戏辅助需要解决寻路问题,当然游戏辅助寻路有很多种方式,比如定点寻路就是预先设定几个坐标点,只要保证点与点之间的直线没有障碍物就能像火车一样一站一站的跑下去。对于经过游戏中的大地图,比如由A点的某个NPC处拿个物品交给大地图另一头的某个NPC就比较适合用这种定点寻路的方式,这种方式简单粗暴,比较有效率。缺点是如果半路有个怪什么的打你一拳,可能就会偏离预定路线,而找不到回家的路...原创 2018-05-08 17:01:28 · 1296 阅读 · 5 评论 -
C或C++获取数组长度
C、C++中没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / si...转载 2018-05-06 10:17:56 · 13519 阅读 · 0 评论 -
VS2010 MFC窗口程序 pugixml读写XML
为了用VC++读写XML文件前后弄了差不多5天了,试过微软自家的MSXML和libxml2库,介绍MSXML的相关书籍和CSDN博客里的文章基本全是XP时代的MSXML4.dll,WINDOWS 7 system32目录只有MSXML3.dll和新版的MSXML6.dll。查了3天资料,痛苦无比,还是无法使用,微软可能是为了更大的兼容考虑让VB之类的其他语言也能调用MSXML6.dll做了一些修改...原创 2018-05-16 18:20:49 · 1679 阅读 · 0 评论 -
如何在C++中产生随机数
Rand 单纯的rand()会返回一个0至RAND_MAX之间的随机数值,而RAND_MAX的值与int位数有关,最小是32767。不过rand()是一次性的,因为系统默认的随机数种子为1,只要随机数种子不变,其生成的随机数序列就不会改变。 其实,对于rand()的范围,我们是可以进行人为设定的,只需要在宏定义中定义一个random(int x)函数,就可以生成范围为0至x的随机数值。当然,也...转载 2018-06-07 08:57:26 · 5236 阅读 · 0 评论 -
C++用API实现鼠标带轨迹移动
void Contra(int dual_X,int dual_Y); //带轨迹移动鼠标int More(int mini,int maxi); //生成随机数int More(int mini,int maxi) //生成随机数函数{ //参数:1.区间最小值;2.区间最大值 srand((unsigned)time(NULL)); //初始化随机数种子 i...原创 2018-07-02 18:21:29 · 5603 阅读 · 0 评论 -
MFC窗口位置和大小的获取
最近在做一个项目,需要控件随对话框大小的变化而变化,因此需要准确获取对话框窗口、控件的大小和位置。经过好一番查寻、测试,终于看到了希望。下面是一些获取窗口位置和大小的函数,示例如下:1、获取屏幕分辨率//下边两个函数获取的是显示屏幕的大小,但不包括任务栏等区域int cx = GetSystemMetrics(SM_CXFULLSCREEN);int cy = GetSyste...转载 2018-07-22 17:41:07 · 2188 阅读 · 0 评论 -
CString和string在unicode与非unicode下的相互转换
string toString(CString cs) { #ifdef _UNICODE //如果是unicode工程 USES_CONVERSION; std::string str(W2A(cs)); return str;#else //如果是多字节工程 std::string str(cs.GetBuffer()); cs.ReleaseBuffer...转载 2018-08-02 12:49:00 · 1221 阅读 · 0 评论 -
怎么跨文件声明变量
比如在A.ccp里有个全局变量int chun_ge想在另一个BB.ccp文件中使用这个全局变量该怎么做?我们可以在BB.ccp文件中再"声明"一次,像这样:extern int chun_ge这就像引入一个.h文件一样引入了其他.cpp文件中的变量。当然能这么做的只能是全局变量。这样再次“声明”了一次后,在BB.ccp文件中使用"chun_ge"变量时就不需要再做其他处理了。对于其他的例如lis...原创 2018-05-02 16:00:02 · 1041 阅读 · 0 评论 -
OnClose()消息和 OnDestroy()消息 释放动作时用到
基于对话框的MFC程序,发现每次程序退出时,托盘的小图标不能自动消失,鼠标移上去之后才能消失,比较不爽。后来发现我删除这个图标的代码是在自己重写的OnClose()函数中,结果断点一看,OnClose()根本没有被调用,确切的说是点“退出”不调用,点右上角的“叉”才调用,难怪出现这个结果,后来还有我想在OnClose()函数中有其他操作也没有被调用。在http://www.qqgb.com/P...转载 2018-04-20 13:02:07 · 3693 阅读 · 0 评论 -
VC++ 使用大漠DLL笔记
1.绑定窗口时的类型转换 int away; HWND wnd; CString fifteen; long Di; wnd=::FindWindow(L"Notepad",NULL); fifteen.Format(L"%d",wnd);//HWND转CString Di=_tstol((LPCTSTR)fifteen); //CString转long away=dm...原创 2018-03-31 10:23:47 · 4391 阅读 · 0 评论 -
CoInitializeEx 与CoInitialize的区别
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象,原因是程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。 有哪些方式呢?单线程和多线程。 CoInitialize指明以单线程方式创建。 CoInitializeEx可以指定COINIT_MULT...转载 2018-03-31 15:05:48 · 4760 阅读 · 0 评论 -
VC自动关闭弹出的MessageBox对话框的总结
下面的程序从5种方法,关闭弹出的MessageBox对话框:首先,创建定时器和弹出MessageBox:void CTestDlg::OnBnClickedButton1() { //启动一个定时器,用于自动触发关闭MessageBox对话框 SetTimer(1, 1000, NULL); //启动一个MessageBox对话框,并检查它的返回值 ...原创 2018-03-31 17:56:31 · 4515 阅读 · 0 评论 -
MFC调用DOS窗口输出数据或字符串
新建一个MFC窗口程序,双击界面上的OK键。先介绍要用到的函数:AllocConsole()函数会为主调进程分配一个新的控制台。函数原型:BOOL WINAPI AllocConsole(void);参数: 无返回值 :如果函数成功,返回值是非零值;如果函数失败,返回值是零值。备注: 一个进程仅能关联一个控制台,所以该函数在主调进程已经具有控制台时将会失败。FreeConsol...原创 2018-04-01 13:07:10 · 2221 阅读 · 0 评论 -
排序算法之堆栈排序
排序——堆排序-大根堆(大顶堆)1.小根堆若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。2.大根堆若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右子女的值。3.结论(1)堆是一棵完全二叉树(如果公有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子)。(2)小根堆的根节点的值是最小值,大根堆的根节点的值是最大值。(...转载 2018-04-09 18:52:51 · 3630 阅读 · 0 评论 -
C++ 中的sort()排序函数用法
sort(first_pointer,first_pointer+n,cmp)该函数可以给数组,或者链表list、向量排序。实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采...原创 2018-04-09 21:16:43 · 10055 阅读 · 0 评论 -
C++命名空间
本讲基本要求 * 掌握:命名空间的作用及定义;如何使用命名空间。 * 了解:使用早期的函数库 重点、难点 ◆命名空间的作用及定义;如何使用命名空间。 在学习本书前面各章时,读者已经多次看到在程序中用了以下语句:using namespace std; 这就是使用了命名空间std。在本讲中将对它作较详细的介绍。一、 为什么需要命名空间(问题提出) 命名空间是...转载 2018-04-04 11:23:04 · 246 阅读 · 0 评论 -
VS2010 MFC中设置HotKey
1.首先建立一个基于对话框的MFC程序,我这里建立的项目名为“Testlili”。 2.然后“项目”--“类向导”--“消息”,选择类名为“CTestliliDlg”,找到WM_HOTKEY消息添加,添加后“现有处理程序”的框框下就会多出一个“OnHotKey”。 3.在“BOOL ×××::OnInitDialog()”函数中加入注册热键的代码,比...原创 2017-09-19 14:32:27 · 2315 阅读 · 0 评论 -
C++ string字符串按分隔符分割成一个数组
C++的string类型可以很方便的操作字符串,但是在使用中发现不支持Split,为了满足使用的需要,我自己写了一个分割函数。#include <string>#include <vector>using std::string; //使用string对象using std::vector; //使用vectorvoid Split(const st...转载 2018-08-02 12:58:54 · 27350 阅读 · 0 评论 -
MFC利用系统API读取INI配置文件
confing.ini中的内容[账号]account=123|456[是否修理装备]repair=1读取INI字符串:CString pourin;GetPrivateProfileString(L"账号",L"account",NULL,pourin.GetBufferSetLength(MAX_PATH),MAX_PATH,L"C:\\Warehouse\\co......原创 2018-08-02 17:51:18 · 852 阅读 · 0 评论 -
如何获得线程的返回值?
最近在学习多线程编程技术过程中,遇到一个问题:如何获取线程的返回值? 线程定义之初:UINT Class::Thread(LPVOID lpParam){ return bResult;} 开启线程:CWinThread *hThread = AfxBeginThread(Thread, lpParam, 0, 0, NULL); 获得线程返...转载 2018-08-15 12:32:59 · 6371 阅读 · 0 评论 -
浅谈C/C++引用和指针的联系和区别
为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针。不止C/C++使用指针。 每一种编程语言都使用指针。C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了。 “Everything uses pointers. C++ just exposes them rather than hiding them,” It's eas...转载 2019-04-16 11:57:23 · 222 阅读 · 0 评论 -
FPS游戏自瞄透视之模块动态加载
用OD附加游戏进程,进入OD主界面以后,我们CTRL+G 跳转到地址 00401000(系统默认通常游戏领空的起始地址)的时候发现了错误。 也就是说代码段不在这了, 那跑哪去了? 为什么会有这样的错误呢?首先我们先来看看什么是基地址我们随便找一个其他游戏CE附加 如上图,基地址 00D0DF1C 实际上是可以继续拆分,我们直接写00D0DF...转载 2018-12-24 15:09:02 · 2698 阅读 · 0 评论 -
MFC程序每次启动前修改文件名
因为一些众所周知,你们懂得的原因,开发一些特殊软件,比如那些能让你在游戏里释放原力和化身斗帝的软件会被检测软件标题和进程名。进程名其实就是exe的文件名,所以为了安全修真就产生了最好能每次启动软件前都随机修改一下exe文件名的需求。但是我们都知道一旦软件启动后是无法修改其文件名的,网上当然也有大神提供了一个方案: 需要重命名的exe做成资源打包进一个exe中,也就是把B....原创 2018-12-17 11:36:05 · 771 阅读 · 1 评论 -
VS2010获得程序当前运行目录函数详解
每个Windows程序都有一个自己的当前目录,默认是程序exe文件所在的目录。系统在给程序加载动态链接库文件(DLL)时先在程序当前目录里查找要加载的DLL,如果在此目录下没有找到系统便会去Windows目录下查找。在这儿我们主要将如何获得程序的当前目录,如果没有自己去设置,我们可以把此目录看成进程所在目录。函数原型:DWORD GetCurrentDirectory(DWORD nBuf......原创 2018-12-06 17:49:23 · 3881 阅读 · 0 评论 -
MFC edit控件实现自动换行
必须设置Vertical Scrollbar = TRUE必须设置MultiLine = TRUE必须设置Horizontal Scrollbar = FALSE必须设置Auto HScroll = FALSE可选设置Want Return = FALSE 可选设置Auto VScroll = TRUE ...转载 2018-12-01 20:53:49 · 2522 阅读 · 0 评论 -
MFC子线程访问/控制对话框程序控件
MFC窗口程序,如果不把具体的流程在子线程中运行,碰到Sleep()函数时程序窗口就会呈现一种未响应的状态,不美观,所以一般都会把具体的流程放到一个子线程中去,这样通常情况下就不会出现“未响应”状态了。但是微软出于安全考虑不允许子线程直接访问窗口程序中的例如按钮、编辑框、静态文本框一类的控件,原因是这样会容易导致访问异常消息混乱造成程序卡死崩溃,MSDN 中也有说明,子线程直接访问主线程...原创 2018-12-01 20:36:15 · 2606 阅读 · 2 评论 -
更改MFC对话框默认的窗口类名
MFC窗口程序的默认类名是"#32770",而且MFC窗口程序不支持动态修改类名,也就是不能像窗口标题那样用this->SetWindowText(L"春哥纯爷们"); 来修改窗口类名。在主程序窗口的属性中有"Class Name"属性,但是默认它是灰色的不可选状态,如图:需要在资源视图窗口中在××××.rc(×是你的工程名),上右键,选择属性把Mfc Mode改成False,默...原创 2018-12-01 18:10:07 · 4039 阅读 · 2 评论 -
使用VC++通过QQ邮箱发邮件
1.设置QQ邮箱首先登陆邮箱点击左上角“设置”→“账户”。打开下图红框框内的两项服务。POP3是接收服务端口,IMAP为发送邮件端口,打开此两项服务后我们就能用第三方软件操作QQ邮箱,查看/发送邮件。 然后需要用绑定QQ号的手机发送短信验证,验证通过后就会得到授权码,第三方软件操作QQ邮箱就需要这个授权码和邮箱账号。2.上传QQ账户和授权码时,要转换成“Base...原创 2018-11-21 17:35:21 · 3471 阅读 · 4 评论 -
MFC中运行出现问题“不支持尝试执行的操作”
问题描述:基于CDialogEx的对话框工程.VS2010开发环境.调试运行到OnInitDialog()的CDialogEx::OnInitDialog()方法的时候弹出提示窗口“不支持尝试执行的操作”。 原因:在函数对话框上的控件之后相应的关联变量没有取消导致出现该问题。虽然可以顺利编译通过,但会提示该问题。 解决方法:查找该关联控件的变量,然后删除该问题控...转载 2018-11-13 15:15:32 · 5754 阅读 · 4 评论 -
OD CE找数据总结(下)
十、判断是否是怪物(角色怪物类别) 1、普通攻击call里面,在跳转地方查看怪物,或者npc对比看哪个跳了。2、ce选择怪物搜索,初始化值,完后选择npc,选择改变的。选择另外一个npc ,选择没改变的,以此类推。3、内存遍历怪物结构。 十一、跨图寻路call 1、call内部头部下断点,一直断下来,可以[esp]!=0x4526c,这里的45...转载 2018-11-13 14:58:02 · 4247 阅读 · 0 评论 -
MFC 编辑框Edit Control控件使用指南
首先创建一个编辑框ID设为IDC_MULTI_LINE_EDIT,然后用MFC类向导为编辑框IDC_MULTI_LINE_EDIT添加CEdit类型的控件变量m_editMultiLine。CString.missio;m_editMultiLine.SetWindowText(); //设置输入框的内容m_editMultiLine.GetWindowTextW(missio); /...原创 2018-10-29 10:36:53 · 8307 阅读 · 0 评论 -
如何判断WINDOWS程序窗口是否无响应
SendMessageTimeout()将指定的消息发送到一个或多个窗口。此函数的原理是向一个待测试窗口发送消息,并期待返回值,如果没有返回值则说明窗口无响应。函数原型:LRESULT SendMessageTimeoutA( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam,...原创 2018-10-29 09:45:03 · 4386 阅读 · 0 评论 -
OD CE找数据总结(上)
一、找点击选怪物call以及选怪状态标志1、ce搜未知数据,选择一个怪,搜变动,换一个,再搜变动,最后找到最像的查看访问地址代码,记下后,od附加跳转下段,返回上一层,用注入软件测试一下。2、找到后,记下call上下代码和call内部代码,遗迹ce搜到的代码,方便以后定位基地址。3、一般参数是存放怪物id等信息的地址和另外一个参数(可能是用来存放计算得到的怪物id等信息,就是ce搜到的...转载 2018-11-12 21:20:17 · 7032 阅读 · 0 评论