随笔分类 - 知识累积
聚少成多,查缺补漏!每天进步一点点!
摘要:因工作需要,需要编译Windows版本的Webkit,中间走了不少弯路,都记录下来,供大家参考!也随时欢迎大家讨论(QQ群:345802342) 整个编译工作参考的是官方文档:https://webkit.org/webkit-on-windows/ 1. 主要的时间是下载代码,不需要VPN,我晚上
阅读全文
摘要:1. 从微软官方下载WDDK,比如:GRMWDK_EN_7600_1.ISO(http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO); 2. 根据操
阅读全文
摘要:昨天晚上加班解决了一个问题,是由于无法正确的捕获到异常导致的。刚开始用try-catch,但是没法捕获到异常;后面改成SEH异常才解决。因此今天将这个问题重新梳理了一遍,关于try-catch, SEH的基本知识,大家可以从MSDN(https://msdn.microsoft.com/en-us/...
阅读全文
摘要:一、引言很多时候,我们写了一个Dll,不希望别人通过DLL查看工具,看到我们的导出函数名称。可以通过以下步骤实现:1. 在def函数中做如下定义:LIBRARYEXPORTSHideFuncName @1 NONAME通过添加NONAME关键字,隐藏函数名,这样的话,用Dependency Walk...
阅读全文
摘要:在Win7/Vista下,如何以兼容模式运行exe? https://msdn.microsoft.com/en-us/library/dd371711(VS.85).aspx 问题描述:在Vista以上版本运行WTL程序,有时候会提示“这个程序可能安装补正确...”的错误,如下图所示: 解决...
阅读全文
摘要:1. /u->中文: 将/u后面的16进制转化成10进制,然后赋值给wchar_t/byte;2. 中文->/u:3. utf-8: utf-8 w/o BOM:没有BOM头 utf-8:有3个字节的BOM头,EFBBBF(utf-16头:FFFE),属于unicode编码格式; 1 // 判...
阅读全文
摘要:1. 如何生成dump文件? 原理:通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件; SetUnhandledExceptionFilter:https://msdn.microsoft.co...
阅读全文
摘要:1. 注释 单行注释:--,类似于C++的// 多行注释:--[[ ... ]],类似于C++的/*...*/2. 语句 分隔符:分号或者空格,一般多行写一起,建议用分号 语句块:do ... end 赋值语句: a, b, c, d = 1, 2, 3, 4 -- global variables local a, b, c = 1, 2, 3 -- local varialbes a, b = b, a -- swap data 赋值运算:+、-、* 、^(乘方) -- 2^3=8、..(连字符) -- "hello" .. " world"...
阅读全文
摘要:问题描述: 我们开发过程中可能会经常遇到,需要屏蔽EXE的双击运行功能,只能通过宿主程序(Service或EXE)来启动。比如腾讯的迷你弹窗,就只能通过主程序来启动,而不能直接通过双击来运行。实现原理:宿主程序可以通过向子程序命令行参数可以来启动,而子程序在初始化的时候,会去检测当前的命令行参数是否匹配;如果匹配,就启动;如果不匹配,就不启动。 因为宿主程序可以通过CreateProcess来传递命令行参数,所以可以顺利执行;而双击程序,没有传递任何命令行参数,自然程序也就没法启动了。程序示例:#define CMD_LINE _T("CommandLine")子程序在程序
阅读全文
摘要:问题描述: 我们在程序开发当中,经常会遇到某些子程序需要实现一天只启动一次的功能,该功能实现的方法有很多种,其原理都是通过记录标记为来实现的。本次要分享的也是利用程序标记为来实现的,而且只需要使用一个标记为:上次启动时间,并将这个标记为保存在注册表中!实现原理: 1. 子程序第一次启动的时候,在注册表中创建一个新的键值,并且保存当前系统时间; (此部分代码省略) 2. 通过定时器去监测是否启动子程序,并对当前时间与当天的最后时间(23:59:59)进行比较;如果当前时间小于当天最后时间,不执行;如果大于,执行子程序,并且将当前时间更新到注册表中; 3. 时间比较...
阅读全文
摘要:time_t -> tm: localtimetm -> time_t: mktime time_t curTime; time(&curTime); dwCurTime = curTime; struct tm *mytm = localtime(&curTime); time_t time2 = mktime(mytm);
阅读全文
摘要:相比于静态加载lib库,动态加载DLL更具有灵活性,而且不需要知道头文件。一般来说,动态加载DLL有以下几个步骤: 第一,根据DLL的函数,定义对应的函数指针。比如 1 // Define function pointers.2 typedef LPSTR (*PU2A)(LPCWSTR wStr, int iCodePage);3 typedef LPCWSTR (*PA2U)(LPCSTR aStr, int iCodePage); 第二,加载DLL,并返回HMODULE。如下:1 HMODULE hModule = ::LoadLibrary(_T("HbUtils.dll&q
阅读全文
摘要:上一篇博客中描述了如何用NotePad++来实现Unicode ANSI之间的转换,这一篇中,我们将学习使用封装后的方法 U2A和A2U 来实现,具体代码如下: 1 #ifndef UNICODEANSI_H_ 2 #define UNICODEANSI_H_ 3 4 #define CP_JP 932 5 #define CP_CH 936 6 #define CP_KO 949 7 #define CP_RU 1251 8 #define CP_EU 1252 // ENGLISH, FRENCH, GERMAN, ITALIAN, PORTUGUESE, SPANISH 9...
阅读全文
摘要:今天碰到一个关于UNICODE和ANSI相互转换的问题,作为一个程序员,我首先想到的是用WideCharToMultiByte/MultiByteToWideChar实现,这个我想大家都会了,我也会在后续博客中介绍如何使用。本博客主要是介绍如何通过NotePad++工具来实现的,NotePad++功能比NotePad强大很多,这我也不赘述了。转入正题吧...... UNICODE 转 ANSI (以中文为例,其他语言设置看最后附录): 首先,用NotePad++打开一个ANSI编码的文件(PS:如何创建ANSI文件,直接创建一个txt文件,默认的编码就是ANSI;或者将现有文件另存...
阅读全文
摘要:Most of time, we will write some common code for MFC and Win32 applications, such as convert operations(char, string, CString, int... convertion). So the code should support MFC and Win32 features. In this article, I will give you an example about how to use MFC features in Win32 application. First.
阅读全文
摘要:1. 打开反汇编窗口:调试模式下,按Ctrl+F11。2. 术语: 2.1 ESP(Extended Stack Pointer): 堆栈指针,寄存器存放当前线程的栈顶指针; i.e: move ebp, esp -- 用ebp保存当前栈指针; 2.2 EBP(Extended Base Pointer): 基址指针,寄存器存放当前线程的栈底指针; i.e: push ebp -- 将基址指针压入栈; 2.3 EIP:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完成当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行; 2.4 EAX:累加器(Accumu...
阅读全文
摘要:存贮属性:C指针有三种存贮属性,分别是:near (近)指针:16位段内偏移地址 far(远)指针:16位段地址+16位段内偏移地址 huge(巨)指针:32位规格化的具有唯一性的内存地址C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option->compiler->model选项),默认的编译模式为small, 在该编译模式下,指针的默认属性为near。 函数也是这个道理
阅读全文
摘要:所谓函数指针,就是指向函数的指针。函数和变量一样,存储在程序内存,如果知道函数的起始地址,就可以调用相应的函数。这就是函数指针的基本原理,通过一个指针来指向函数的存储地址,然后通过该指针来操作函数。关于函数指针的简介,网上都可以搜到一箩筐,我想用一个简单的例子来讲述函数指针的用法。如下:1. 申明一个函数指针FP,指向int Test(int, int);的函数;2. 可以在别的函数中,通过FP来调用int Test(int, int);函数;typedef int(*FP)(int, int);int Max1(int x, int y){ return x > y ? x : y;}
阅读全文
摘要:这是C++的规则const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰它.但是static 的数据成员可以声明为const.
阅读全文
摘要:C++/CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了与以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下:1)gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址;2)gcnew创建的对象由虚拟机托管,而new创建的对象必须自己来管理和释放。当然,从程序员的角度来说,管它是句柄还是什么其他的东西,总跑不掉是对某块内存地址的引用,实际上我们都可以理解成指针。int^p1 = gcnew int(); 利用gcnew,可以不用程序员释放申请的资源;int* p1 = new int(); delete p1; 利用new, 程序员必须手动释放申请的
阅读全文
posted @ 2013-01-31 11:21
nchxmoon
浙公网安备 33010602011771号