c++成员函数回调

四月 27th, 2012 10 次阅读 0 条评论

 

#ifndef _CALLBACK_H_
#define _CALLBACK_H_

typedef void Callback(void*, void*);

#define CALLBACK_ARG_TYPE void*

#define DEFINE_DO_CALLBACK()                    \
void DoCallback(void* obj, Callback cb,         \
                CALLBACK_ARG_TYPE arg ) {       \
    cb(obj, arg);                               \
}

#define DECLARE_CALLBACK(type, mfn)             \
static void __cb_##mfn##__(void* s,             \
                       CALLBACK_ARG_TYPE arg)  {\
    ((type*)s) -> mfn (arg);                    \
}                                               \
void mfn (CALLBACK_ARG_TYPE)


#define CALLBACK(mfn) __cb_##mfn## __

#endif // _CALLBACK_H_

 

 

分类: 标签: c++ callback 

2011-2-21 小结

二月 21st, 2011 399 次阅读 0 条评论
  1. mingw环境下编译boost
    下载bjam.exe 然后: bjam install --toolkit=gcc debug ....
  2. 在编写通讯方面的程序时,注意字符串中'\0'的意义。
分类: 标签:  

[游戏]编程机器人

一月 10th, 2011 329 次阅读 0 条评论

分类: 转帖 标签:  

amd64架构的Ubuntu中安装386的程序

十二月 14th, 2010 287 次阅读 0 条评论

sudo dpkg -i --force--all <packagename.deb>

分类: 标签:  

Go与汇编混合编程

十二月 2nd, 2010 505 次阅读 1 条评论

想要了解Go的底层机制,必须了解其与汇编程序(plan9 asm)混合工作的方法,以下是个人的一些总结。

1, 形式

在go文件中添加包和函数的声明,在s文件中实现函数,分别使用8g和8c处理后,用gopack打包成a文件,安装到包目录中。然后就可以在一般的go文件中导入混合实现的包了。

2, 汇编函数格式

TEXT   <package name>·<func name>+0(SB),$X-Y
    <instructions>
    RET

<package name> : 包名,可省略
<func name>      : 函数名
<instructions>     : 指令序列
X                       : 自动变量占用的栈空间
Y                       : 参数和返回值占用的栈空间
包名与函数名之间的点为间隔符,vim中的输入方式为<C-V>u00b7

3, 参数、返回值的传递方式

从右到左,在栈中留出返回值的空间,参数压入栈中。

4, 栈空间维护

plan9汇编中,自动实现函数栈空间的维护,不需要显式的维护操作。在函数的第一行,给出了自动变量、参数和返回值的空间大小。进入函数后,name+0(FP)指向返回地址,386架构中, name+4(FP)指向第一个参数。FP(frame pointer)是一个伪寄存器,使用时必须加上参数名称: name+0(FP),name可为任意值。SP为真实的栈指针,指向第一个自动变量。

参考:

 

 

分类: 标签: Golang 

几个有趣的项目

十二月 1st, 2010 219 次阅读 0 条评论
分类: 标签: