c++
青水
高级程序员,系统分析师
展开
-
简单地自定义实现 windows API InterlockedIncrement
自定义实现 windows APIInterlockedIncrement:long __declspec(naked) incby(volatile long*,int){ __asm { push ebp mov ebp,esp push ebx mov ebx, [ebp+8] ...原创 2019-07-20 15:18:17 · 177 阅读 · 0 评论 -
C++构造函数初始化列表的执行分析
C++构造函数初始化列表对于一般变量(int,long,float,double,bool等)不管是否用初始化列表,生成的汇编代码基本一致,不会有执行效率的提升。对于类变量,则使用初始化列表调用适当的类构造函数,确实可以提高代码初始化效率。因为不是在初始化列表列表中,编译器会生成调用默认的类构造函数,而在构造函数体内的初始化又会再次调用,由此产生的无效调用。可见:使用初始化列表,不一定...原创 2018-12-22 09:00:09 · 403 阅读 · 0 评论 -
【ASM】函数变量定义
asm参量一般定义在数据段下。今天用vc++带的cl编译cpp文件生成asm代码后发现另一种定义参量方式,意义同直接定义在.data数据节中。可以如下定义:print_esp proc_DATAS segment szfmt1 db '这是1 esp=%p',13,10,0 szfmt2 db '这是2 esp=%p',13,10,0 x DWORD 0h_DATAS ends...原创 2018-11-13 22:00:48 · 1627 阅读 · 0 评论 -
__cdecl,__stdcall,__fastcall,__pascal,__thiscall 的区别
转自 https://www.cnblogs.com/john-h/p/6276828.html microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。堆栈由谁清除这个很重要,如果是要写汇编函数给C调用,一定要小心堆栈的清除工作,如果是__cdecl方式的函数,则函数本身(如果不用...转载 2018-11-11 12:31:10 · 252 阅读 · 0 评论 -
STL之map失足小记01
一年多没写过c++了,今天跳一坑里去了。现象: map.insert(pair<int,boo>(x,true);最后结果总是 map[x] 为false出错代码:#include <map>#include <iostream>using namespace std;int main(int argc, char* argv[]){ ...原创 2018-11-02 22:54:24 · 497 阅读 · 0 评论 -
c++之于80X86汇编之stdcall,cdecl调用
stdcall:windows API调用方式,即WINAPI。cdecl:c语言默认调用方式。问题的由来。不同的调用方式,包括其它调用方式,fastcall,thiscall等等,主要是为了解决函数调用中,参数的传递问题。stdcall和cdecl调用都是通过栈来传递参数。调用之前先将参数入栈,再调用函数,调用后再清理栈。由此就有了不同的调用方式约定,这些调用方式决定了参数的传递方式及清...原创 2018-11-03 23:14:38 · 471 阅读 · 0 评论 -
linux下自动补全命令实现之readline库
readline库:readline-7.0.tar.gz依赖库:ncurses-6.0.tar.gz分别编译安装上面两个库后,便可以进行代码编译了。测试代码:#include <unistd.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include...原创 2018-09-22 15:07:57 · 1532 阅读 · 0 评论 -
WIN7 + VC6.0 编译安装openssh
1、安装perl 环境 strawberry-perl-5.18.12、安装VC++6.0 开发环境,配置环境变量,使在cmd中可以访问 nmake,cl,link 工具3、解压 openssl-1.0.2n.tar.gz 到 E:\openssl-1.0.2n4、打开一个cmd命令窗口5、cd /d E:\openssl-1.0.2n6、perl configure VC-W原创 2018-02-03 22:54:48 · 424 阅读 · 0 评论 -
RegisterApplicationRestart
#include #include BOOL SetRestartApplication(const TCHAR* commandLine){typedef HRESULT (WINAPI* PFN_RegisterApplicationRestart)(LPWSTR,DWORD);PFN_RegisterApplicationRestart pfnRegisterAp原创 2015-01-18 19:37:20 · 1841 阅读 · 0 评论 -
locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
LC_ALL:影响所有的设定项。LC_CTYPE:仅影响指定的设定项。LANG:改变没有设定LC_CTYPE的其它项的默认值。获取之前的locale设定:const conar * cur_locale = setlocale(LC_CTYPE,NULL);改变当前的多字节环境:const char * szlocale = setlocale(LC_CTY原创 2015-01-17 10:25:46 · 495 阅读 · 0 评论 -
关于 SetConsoleCtrlHandler
函数原型:WINBASEAPBOOLWINAPISetConsoleCtrlHandler( __in_opt PHANDLER_ROUTINE HandlerRoutine, __in BOOL Add);原创 2014-05-17 21:55:21 · 1645 阅读 · 0 评论 -
c++ replacement new 操作
#include #include #include //注意必须包括此头文件class CTest{public:CTest(int i,int ii){m = i;n = ii;p = new char[100];strcpy(p,"good test");}~CTest(){m = 11;n = 13;delete[原创 2013-10-23 16:06:23 · 2469 阅读 · 0 评论 -
msvc6.0 编译 putty 0.63
需要修改的地方有:1. windows.c文件,需要添加如下定义:#define FLASHW_STOP 0#define FLASHW_CAPTION 1#define FLASHW_TRAY 2#define FLASHW_ALL (FLASHW_CAPTION|FLASHW_TRAY)#define FLASHW_TIMER 4#defin原创 2013-12-03 14:29:56 · 756 阅读 · 0 评论 -
Vc++ new delete 线程非安全性
VC++ 6.0是目前我最喜欢的编译器之一。已有六年的使用历史,本以为已经相当熟悉了,可今天让我,之前不知道写了多少的new,delete都没有问题,同样的电脑,同样的操作系统,还是以前的VC6.0开发环境,今晚却让我苦逼了一晚上。情景:有两个线程,一个线程用来读取文件(new 内存块),另一个线程用来处理读取的文件内容(有delete 内存块)。首先,删除的每一个内存块都是线程1合法new的原创 2013-06-29 01:59:26 · 1655 阅读 · 1 评论