- 浏览: 37185 次
- 性别:
- 来自: 上海
最新评论
用法:
头文件中声明:
DECL_LINK( PaintingFirstLineHdl, PaintFirstLineInfo* );
宏:#define DECL_LINK( Method, ArgType ) \
long Method( ArgType ); \
static long LinkStub##Method( void* pThis, void* )
展开:
long PaintingFirstLineHdl(PaintFirstLineInfo*);
static long LinkStubPaintingFirstLineHdl(void*pThis,void*);
等于声明了两个方法。
CXX文件: IMPL_LINK(OutlineView, PaintingFirstLineHdl, PaintFirstLineInfo*, pInfo)
宏:
#define IMPL_LINK( Class, Method, ArgType, ArgName ) \
IMPL_STUB( Class, Method, ArgType ) \
long Class::Method( ArgType ArgName )
#define IMPL_STUB(Class, Method, ArgType) \
long __EXPORT Class::LinkStub##Method( void* pThis, void* pCaller) \
{ \
return ((Class*)pThis )->Method( (ArgType)pCaller ); \
}
展开:
long_EXPORT OutlineView::LinkStubPaintingFirstLineHdl(void *pThis,void *pCaller)
{
return ((Outlineview*)pThis)->PaintingFirstLineHdl((PaintFirstLineInfo*)pCaller)
}
long OutlineView::PaintingFirstLineHdl(PaintFirstLineInfo* plnfo)
传递函数指针:
Link alink (LINK(this,OutlineView,PaintingFirstLineHdl))
宏:
typedef long (*PSTUB)( void*, void* );
#define LINK( Inst, Class, Member ) Link( (Class*)Inst, (PSTUB)&Class::LinkStub##Member )
展开:
Link((OutlineView*)this,(PSTUB)&OutlineView::LinkStubPaintingFirstLineHdl)
Link类的构造函数: Link( void* pLinkHdl, PSTUB pMemFunc );
pLinkHdl: 对象的地址。
pMemFunc: 指向所要调用的函数指针。
这样把alink传递到任何地方,只要对象还存在就能调用PaintingFirstLineHdl这个方法。
调用:
inline long Link::Call(void *pCaller) const
{
return pFunc ? (*pFunc)(pInst, pCaller) : 0;
}
================
补充:
IMPL_LINK(OutlineView, PaintingFirstLineHdl, PaintFirstLineInfo*, pInfo)
void ImpEditEngine::Paint( OutputDevice* pOutDev, Rectangle aClipRec, Point aStartPos, sal_Bool bStripOnly, short nOrientation )
mpOutliner->SetPaintFirstLineHdl(LINK(this,OutlineView,PaintingFirstLineHdl));
////////////////////////////////////////////////////////////////////////////////////
Link aLink( LINK(this,OutlineView,EventMultiplexerListener) );
mpOutlineViewShell->GetViewShellBase().GetEventMultiplexer()->AddEventListener(
aLink,
tools::EventMultiplexerEvent::EID_CURRENT_PAGE
| tools::EventMultiplexerEvent::EID_PAGE_ORDER);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
赋值:
mpOutliner->SetPaintFirstLineHdl(LINK(this,OutlineView,PaintingFirstLineHdl));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
调用:
inline long Link::Call(void *pCaller) const
{
return pFunc ? (*pFunc)(pInst, pCaller) : 0;
}
构造函数: Link( void* pLinkHdl, PSTUB pMemFunc );
pLinkHdl: 对象的地址。
pMemFunc: 指向所要调用的函数指针。
宏:
typedef long (*PSTUB)( void*, void* );
#define LINK( Inst, Class, Member ) Link( (Class*)Inst, (PSTUB)&Class::LinkStub##Member )
mpOutliner->SetPaintFirstLineHdl(LINK(this,OutlineView,PaintingFirstLineHdl));
Using ## concatenates what's before the ## with what's after it.
展开:Link((OutlineView*)this,(PSTUB)&OutlineView::LinkStub##PaintingFirstLineHdl)
LinkStubPaintingFirstLineHdl
IMPL_LINK(OutlineView, PaintingFirstLineHdl, PaintFirstLineInfo*, pInfo)
按照下面的宏展开:
IMPL_STUB(OutlineView,PaintingFirstLineHdl,PaintFirstLINEInfo*) \
long OutlineView::PaintingFirstLineHdl(PaintFirstLineInfo* plnfo)
////////////////////////////////////////////////////////////////////////////////
long_EXPORT OutlineView::LinkStubPaintingFirstLineHdl(void *pThis,void *pCaller){
return ((Outlineview*)pThis)->Method((argType)pCaller) }\
long OutlineView::PaintingFirstLineHdl(PaintFirstLineInfo* plnfo)
////////////////////////////////////////////////////////////////////////////
#define IMPL_LINK( Class, Method, ArgType, ArgName ) \
IMPL_STUB( Class, Method, ArgType ) \
long Class::Method( ArgType ArgName )
#define IMPL_STUB(Class, Method, ArgType) \
long __EXPORT Class::LinkStub##Method( void* pThis, void* pCaller) \
{ \
return ((Class*)pThis )->Method( (ArgType)pCaller ); \
}
头文件中声明:
DECL_LINK( PaintingFirstLineHdl, PaintFirstLineInfo* );
宏:#define DECL_LINK( Method, ArgType ) \
long Method( ArgType ); \
static long LinkStub##Method( void* pThis, void* )
展开:
long PaintingFirstLineHdl(PaintFirstLineInfo*);
static long LinkStubPaintingFirstLineHdl(void*pThis,void*);
等于声明了两个方法。
CXX文件: IMPL_LINK(OutlineView, PaintingFirstLineHdl, PaintFirstLineInfo*, pInfo)
宏:
#define IMPL_LINK( Class, Method, ArgType, ArgName ) \
IMPL_STUB( Class, Method, ArgType ) \
long Class::Method( ArgType ArgName )
#define IMPL_STUB(Class, Method, ArgType) \
long __EXPORT Class::LinkStub##Method( void* pThis, void* pCaller) \
{ \
return ((Class*)pThis )->Method( (ArgType)pCaller ); \
}
展开:
long_EXPORT OutlineView::LinkStubPaintingFirstLineHdl(void *pThis,void *pCaller)
{
return ((Outlineview*)pThis)->PaintingFirstLineHdl((PaintFirstLineInfo*)pCaller)
}
long OutlineView::PaintingFirstLineHdl(PaintFirstLineInfo* plnfo)
传递函数指针:
Link alink (LINK(this,OutlineView,PaintingFirstLineHdl))
宏:
typedef long (*PSTUB)( void*, void* );
#define LINK( Inst, Class, Member ) Link( (Class*)Inst, (PSTUB)&Class::LinkStub##Member )
展开:
Link((OutlineView*)this,(PSTUB)&OutlineView::LinkStubPaintingFirstLineHdl)
Link类的构造函数: Link( void* pLinkHdl, PSTUB pMemFunc );
pLinkHdl: 对象的地址。
pMemFunc: 指向所要调用的函数指针。
这样把alink传递到任何地方,只要对象还存在就能调用PaintingFirstLineHdl这个方法。
调用:
inline long Link::Call(void *pCaller) const
{
return pFunc ? (*pFunc)(pInst, pCaller) : 0;
}
================
补充:
IMPL_LINK(OutlineView, PaintingFirstLineHdl, PaintFirstLineInfo*, pInfo)
void ImpEditEngine::Paint( OutputDevice* pOutDev, Rectangle aClipRec, Point aStartPos, sal_Bool bStripOnly, short nOrientation )
mpOutliner->SetPaintFirstLineHdl(LINK(this,OutlineView,PaintingFirstLineHdl));
////////////////////////////////////////////////////////////////////////////////////
Link aLink( LINK(this,OutlineView,EventMultiplexerListener) );
mpOutlineViewShell->GetViewShellBase().GetEventMultiplexer()->AddEventListener(
aLink,
tools::EventMultiplexerEvent::EID_CURRENT_PAGE
| tools::EventMultiplexerEvent::EID_PAGE_ORDER);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
赋值:
mpOutliner->SetPaintFirstLineHdl(LINK(this,OutlineView,PaintingFirstLineHdl));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
调用:
inline long Link::Call(void *pCaller) const
{
return pFunc ? (*pFunc)(pInst, pCaller) : 0;
}
构造函数: Link( void* pLinkHdl, PSTUB pMemFunc );
pLinkHdl: 对象的地址。
pMemFunc: 指向所要调用的函数指针。
宏:
typedef long (*PSTUB)( void*, void* );
#define LINK( Inst, Class, Member ) Link( (Class*)Inst, (PSTUB)&Class::LinkStub##Member )
mpOutliner->SetPaintFirstLineHdl(LINK(this,OutlineView,PaintingFirstLineHdl));
Using ## concatenates what's before the ## with what's after it.
展开:Link((OutlineView*)this,(PSTUB)&OutlineView::LinkStub##PaintingFirstLineHdl)
LinkStubPaintingFirstLineHdl
IMPL_LINK(OutlineView, PaintingFirstLineHdl, PaintFirstLineInfo*, pInfo)
按照下面的宏展开:
IMPL_STUB(OutlineView,PaintingFirstLineHdl,PaintFirstLINEInfo*) \
long OutlineView::PaintingFirstLineHdl(PaintFirstLineInfo* plnfo)
////////////////////////////////////////////////////////////////////////////////
long_EXPORT OutlineView::LinkStubPaintingFirstLineHdl(void *pThis,void *pCaller){
return ((Outlineview*)pThis)->Method((argType)pCaller) }\
long OutlineView::PaintingFirstLineHdl(PaintFirstLineInfo* plnfo)
////////////////////////////////////////////////////////////////////////////
#define IMPL_LINK( Class, Method, ArgType, ArgName ) \
IMPL_STUB( Class, Method, ArgType ) \
long Class::Method( ArgType ArgName )
#define IMPL_STUB(Class, Method, ArgType) \
long __EXPORT Class::LinkStub##Method( void* pThis, void* pCaller) \
{ \
return ((Class*)pThis )->Method( (ArgType)pCaller ); \
}
发表评论
-
指针 多维数组
2012-06-05 16:12 663这篇文章写的很好 http://www.cnblogs.com ... -
pImp
2011-11-08 17:24 778http://www.cnblogs.com/JulyZhan ... -
关于构造函数,析构函数,explicit等内容
2011-11-01 17:04 1164一.编译器会为我们做什 ... -
C语言标准
2011-10-21 12:11 11881.K&R C 1978年,丹尼斯·里奇(Dennis ... -
对话框工厂
2011-10-14 18:00 6331.对于工厂我的理解: 良好的封装性。使用和创建,初始化分开。 ... -
typedef和指针结合
2011-10-14 17:42 7681. typedef (int *) pInt; 2.type ... -
const的理解和应用
2011-10-14 16:52 1272const的理解和应用 一.理解 const是一种语义上的约束 ... -
空指针的判断
2011-10-11 17:43 882请看NULL的定义: #if !defined(__cp ... -
GUN C 和 ANSI C的几个区别
2011-10-11 10:52 1041http://hi.baidu.com/deep_pro/bl ... -
浮点数的比较
2011-10-11 10:48 1194一浮点数的知识 1.首先浮点数不用补码表示,只有int型才用补 ... -
关于字符串倒转
2011-10-10 20:25 756有纯倒转,也有按单词为单位的。想做个总结 #inclu ... -
C数组和指针的区别
2011-10-10 19:25 685看《C专家编程》总结的的。 首先是个经典的例子: 一个文件定义 ... -
不用中间变量交换数据
2011-10-10 14:42 629那种加加减减的方法其实不对。因为缩小了数据范围。 a1=a1+ ... -
C++模板
2011-10-08 15:52 602template是关键字,template ... -
Quick Sort(快速排序)
2011-10-08 11:20 636Quick Sort算法描述如下: 假设S代表将被处理的序列 ... -
约瑟夫环的解答
2011-10-07 22:48 594http://blog.csdn.net/kittyjie/a ... -
Linux判断大小尾数(big-endian,little-endian)的方法
2011-10-07 22:12 1477static union { char c[4]; u ... -
c++基本文件操作
2011-09-30 00:28 750#include<iostream> #incl ... -
关于文件操作的头文件,类
2011-09-27 14:11 1065C++ 可以看这个 http://www.cplusplus. ... -
关于回车,换行,EOF
2011-09-26 17:41 2730回车换行: http://www.cnblogs.com/fa ...
相关推荐
函数指针&回调函数培训讲义,帮助学习函数指针以及回调函数。
利用函数指针实现C的回调函数,实现调用者和底层驱动的解耦第一种方式利用函数指针实现C的回调函数,实现调用者和底层驱动的解耦第一种方式利用函数指针实现C的回调函数,实现调用者和底层驱动的解耦第一种方式利用...
指针函数和函数指针变量指针 函数和函数指针变量
彻底理解指针,指针数组和数组指针,指针函数和函数指针.doc
里面包含: 普通函数指针,同一个类函数指针,不同类的函数指针的使用。
我知道函数指针是指向函数的指针,指针函数还是指一个函数的返回值是一个指针,但下面 的几道题还是感觉很迷惑。各位能否讲的详细点呢? (1)float(**def)[10] def是什么? (2)double*(*gh)[10] gh是什么? (3)double...
C/C++ 函数指针的意义,函数指针的用法
本题希望通过回调函数,定义一个冒泡排序函数,可以根据函数指针指向不同的比较函数,分别实现从大到小和从小到大的排序。 希望通过这道题目,可以帮助大家理解函数指针与回调函数。本题较为简单,仅能处理整数的...
C++模拟实现的类似于C#的委托。 使用STL封装类名称的变化,使用函数指针封装函数名称的变化。 在Visual C++ 6.0下测试通过。 使用的时候只需要关注IFunctor和IDelegate两个接口即可。
本文叙述了函数指针和指针函数的区别,防止程序员混淆两者。
C++中一般函数指针和类的成员函数指针的区别
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用
C语言指针函数和函数指针详细介绍.
详解函数指针和指针函数 函数类型 (*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的...
函数指针和指针函数的区别,以及const的用法,指针常量,常量指针的用法
函数指针和指针函数区别,腾讯1面的考题,它们的作用分别是什么?
易语言简单类函数指针源码,简单类函数指针,创建线程,取类函数指针,类函数,娃哈哈,CreateThread,SetWindowTextA
指针 函数指针 (全局函数/类成员函数)和函数对象
一、函数指针的定义 顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * ...
利用函数指针实现C的回调函数,实现调用者和底层驱动的解耦 第二种方式利用函数指针实现C的回调函数,实现调用者和底层驱动的解耦 第二种方式利用函数指针实现C的回调函数,实现调用者和底层驱动的解耦 第二种方式