自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (2)
  • 收藏
  • 关注

原创 VC++中的std::function比较问题

多年前VC++刚完善C++11那会儿,我就已经考虑将一个包含有unique timer模型的库中函数指针替换成std::function了,当时就苦恼std::function要如何比较,满世界的论坛,博客找了个遍,也没有答案,最终我只能去二进制层面寻求方法。最初的时候,我一直在用一段代码来处理这个问题:在VC++中,可以使用这个结构来模拟std::function的二进制数据:struct __std_func_struct { size_t* vt; // 虚函数表 void* fun

2022-06-17 11:55:48 887 1

原创 lua多线程解决方案

先讲下坑点:1、lua_newthread 名称存在误导性,它只是拷贝一个栈,并不是创建一个线程。2、不同的线程使用lua_newthread 出来的栈去调用lua代码,也要加锁,否则也会异常。3、在lua底层有两个宏:lua_lock与lua_unlock,默认的情况下,这两个东西不起作用,lua的作者的本意是希望我们在有并发需求的时候,重写这两个宏,所以只要是底层用到这两个宏的地...

2019-10-15 14:49:42 7203 1

原创 xml转义符规则

最近在写一个xml解析器,我百度xml转义符被坑过,为了防止更多的人被坑,所以写下这篇博客。强制要求转义的符号只有两个 &与1、转义符以 & 开始2、转义符以 ; 结束3、大小写敏感4、单独的&字符,不管在什么位置,都是错误。>不需要转义,不管在哪都一样,不要以为xml提供了它的转义符它就必须要转义。在标签内,例如属性值引号与双引号不是必须转义:

2017-01-06 09:30:51 3003

原创 luajit利用ffi结合C语言实现面向对象的封装库

luajit中,利用ffi可以嵌入C,目前luajit的最新版是2.0.4,在这之前的版本我还不清楚这个扩展库具体怎么样,不过在2.04中,真的很爽。  既然是嵌入C代码,那么要说让lua支持面向对象,不如说是让C语言模拟面向对象编程,然后让luajit的ffi嵌入。要文字彻底来描述清楚这个问题,我的表达能力很有限,说不清楚,所以直接用代码来说吧。//C++class foo_type{p

2015-06-12 04:33:26 2754 1

原创 对于TCP协议中IOCP模型的一些简单的理解

请不要觉得这一篇没有代码的文章没意义,对IOCP模型的代码,百度搜索可以得到很多,但是后续很多需要纠结的地方,很多人都经历过,如果你已经在尝试写IOCP服务端了,那么你很可能会对写代码之外的一些设计问题很纠结,那么本文很可能是对你有所帮助的

2014-09-22 11:00:48 2793

原创 对lua的简单扩展,使它能快速关联C++的数据。

很早的时候,我纠结过一件事,假如,我在C++公开给脚本的接口中,要使用C++里的某一个对象,并且,我的程序中有很多个不同的lua虚拟机,每一个虚拟机要关联一个C++对象,并且这是多线程的,那么这时候应该如何快速的利用lua_State指针来定位到对象指针呢?

2014-08-16 12:46:12 1371

原创 D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法

说白了,也就是HOOK掉Present,这种代码,其实百度上某些地方有,但是很多人估计不知道怎样得到Present的地址。所以就有些奇葩的例子:先到游戏的登录器内把CreateProcess之类的HOOK掉,让游戏进程暂停启动,然后注入游戏 HOOK Direct3DCreate9 得到 IDirect3D9 对象之后,又得到 IDirect3DDevice9 对象,最终得到Present

2013-07-15 08:16:51 5357 2

原创 vc SDK山寨spy++ FinderTool工具(靶心控件)纯GDI自绘

GDI编程本人不是很懂,以下代码,是之前还在MFC写代码的时候,度娘爬楼,挖坟千百次的成果,注释得已经比较详细了,反正我知道的都注释了,我不知道的我也没办法了。现在只是把这个代码转到win32 SDK来写,实际上和MFC区别没多大,如果你需要MFC的,可以去下载我之前发布的资源来看:http://download.csdn.net/detail/gnorth/4982016这个类,本意是继

2013-07-13 00:38:32 2571

原创 对A*算法的路径进行优化

如果你没有看过上一个文章的代码,请到这个传送门:A*算法的实现注:优化最终路径,必然会对算法耗时造成一定的影响。针对上一篇文章,我提到的设想,对路径进行分段处理,每一小段再进行一次A*,那么我们需要新增一个SearchEx接口,并对原本的Search接口进行修改。Search新增一个参数,用来代替原本的BREAK_GAP常量宏,在Search中,清理内存时,将地图数据恢复。

2013-06-22 03:51:04 7933

原创 A*寻路算法的实现

原理:http://www.cppblog.com/christanxw/archive/2006/04/07/5126.html算法理论请到原理这个传送门,代码中的注释,已经比较详细,所以我不会讲太多的原理,该文章本身就是以A*的思路,对算法进行一次速度上的优化,用一些更效率的方式来代替算法原理中必要的步骤。针对算法原理,做出如下改动:抛弃关闭列表,取而代之的是根据地图数据生成一个B

2013-06-21 20:01:47 5638

原创 游戏寻路算法的简单实现

提到寻路算法,大家都会想到A*算法。在度娘找了不少代码,看了不少教程之后,尤其是这个文章中提到的总结:http://www.cppblog.com/christanxw/archive/2006/04/07/5126.htmlA*算法总结(Summary of the A* Method)Ok ,现在你已经看完了整个的介绍,现在我们把所有步骤放在一起:1.         把起点加

2013-06-19 14:53:58 4340

原创 在静态库中,实现自动的初始化与卸载接口

所谓自动的自动初始化与自动卸载其实就是类似于dll中的DllMain函数,或者MFC DLL中的InitInstance与ExitInstance更为贴切(其实这两个也是从DllMain调用过来的)。也就是当调用静态库的PE文件加载时,自动初始化,PE文件释放时,自动执行卸载这个作用,看似不怎么样,实际运用中,处理好之后则可能省去很多麻烦的代码。你封装在静态库中的代码,通常

2013-06-19 13:43:03 1962 1

原创 基于面向对象封装的模态对话框类

头文件class CBlxDialog { public:  CBlxDialog();  virtual ~CBlxDialog();  BOOL Create(HINSTANCE hInstance, UINT uDialogID, UINT uIconId = NULL);  BOOL Destroy();  HWND m_hWnd;  HICON m_h

2013-05-15 11:13:05 1161

原创 split, midex, replace 基于C函数库字符串函数的基本实现

size_t split(const char *src, const char *delimiter, strarray &stra){stra.clear();char *temp = (char*)src;int len_src = strlen(temp);unsigned long pro;VirtualProtect(temp, len_src + 1, 0x4

2013-04-04 12:05:19 1427 1

原创 将线程入口函数写在面向对象中的一个很有意思的例子

通常,要在类中封装一个线程入口,我们都把入口函数static掉,这样子就把隐含的this参数剔除掉了,但以下这个例子却是不同。class _tc{public: DWORD WINAPI _TPROC() {  printf("The thread id:%d\n", m_dwThreadId);  return 0; } void test() {

2013-03-24 13:04:30 925

原创 使VC++中的srand rand 简单具备线程安全

如果不考虑把代码封装到一起,可以在每一个线程中调用srand ,这种做法其实也是最标准的,如果代码中要用到随机数的地方比较多,还是不要把srand与rand封装到一起。 如果每个线程会用到的比较少的次数,想把代码封装到一起的前提下,在VC++中可以简单的使用TLS(线程本地储存)来作用一个用于标志的变量来使srand在每个线程中只会被执行一次,由于使用到TLS,在效率上首先就要低得多,因为

2013-03-22 11:56:27 2334

原创 win32 SDK模态对话框一例(使用资源)

呵呵,其实基本的写写和MFC区别不大,当然,速度上会比MFC有点优势。当然,用来做开发的话,更多的细节上需要敲的代码会比较多。//main.h#include #include "resource.h"#include BOOL OnInitDialog();BOOL OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam);

2013-03-13 11:13:00 1066

原创 Win7 x64 VS6无法安装WTL的解决办法

由于VS6.0是32位程序,在win7 x64上的公共文件夹位置的注册表项与x86系统的不同,所以可以通过更改setup.js的注册表路径来安装。 将var strVC6Key = "HKLM\\Software\\Microsoft\\VisualStudio\\6.0\\Setup\\VsCommonDir";修改为:var strVC6Key = "HKEY_LOCAL_

2012-10-29 18:02:34 1382

原创 使用GDI+屏幕截图内存中压缩为jpg

原文:http://hi.baidu.com/ypxmaomao/blog/item/9b68c0b771c3a9fe30add133.html1.下载(GDI+ for VC6.0 SDK)GDIPlus文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中.   下载地址:http://www.codeguru.com/code/legacy/

2012-06-11 13:10:38 2736

原创 在Win7下“显卡驱动已停止响应...”的几种原因和解决办法

1、驱动不兼容,该问题只有少部分人存在,确确实实也是有这种问题的,以前我也碰到过一次,换到最新的驱动之后经常出现。对于这种情况的解决办法,新驱动并不是最好的,尽量更换一些旧版本的驱动程序尝试。 2、温度高时引起,我买过一块影驰GTX260无双版,这个显卡在性能上什么都强力,就是温度高,噪音大,待机都是70多度,满载能到90几度,如果高得离谱,在win7下,驱动就停止响应,XP下,有时候

2012-05-14 09:12:05 5964

原创 VC6.0 MFC中WebBrowser控件禁止新窗口弹出的解决办法

在百度上找了很多方法,没有一个能够完美的解决这个问题。我在XP SP3上测试,WebBrowser的OnNewWindow3事件中处理是无效的,不知道人家说XP SP2有效是怎么回事。那种创建一个隐藏窗口出来的办法,我个人反正是不愿意去用,总之感觉不太好,而且据说这是目前唯一的解决办法。 后来实在没办法了,只能往土办法去想了,我们知道IE中有状态栏这个东西,当鼠标指向某个链接时,状

2012-02-14 15:25:46 4296 1

原创 Scintilla在VC6和VS里的编译方法

不知道Scintilla是什么的可以百度一下,我就不介绍了。 Scintilla是开源的,下载下来的是源码和库文件,所以要先编译成DLL,百度上找出来的文章有几个还是比较全面的,但是编译问题都没说的太清楚。 下载后解压,我是直接解压在F:\ 首先说下VS版本的编译,正常安装VS任意版本后,可以在开始菜单—程序—Microsoft Visual Studio *** — Vi

2012-02-03 15:48:11 3638

纯自绘无资源的仿spy++的FinderTool控件

该Demo中的CFinderTool继承自CStatic类,使用GDI在内存中绘制了图标和光标来实现模仿SPY++的效果,同时绘制了窗口橡皮套效果,使用说明已经写在对话框上。

2013-01-10

模仿SPY++瞄准镜获取窗口句柄

代码没注释,需要的就下载来自己研究吧。 原理就是自己画两个图标和一个光标文件,子类化一个CStatic来响应鼠标左键按下和弹起的消息,在这两个消息内更改图标文件以达到SPY++的效果。获取窗口句柄部分我是用了一个线程来操作的。

2012-07-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除