函数指针如何指向窗体内的函数?各位高手帮忙

citybird888 2006-09-21 06:25:44
头文件(局部)
class Tfrmsubscribe : public TForm
{


__published: // IDE-managed Components



private: // User declarations



public: // User declarations

void funin(TListItem * Item);// 窗体内的函数


protected:

};

void funout(TListItem * Item);// 窗体外的函数


.cpp文件(局部)
//-------------------------------------------------------
Tfrmsubscribe *frmsubscribe;
void (*aa) (TListItem *);

void __fastcall Tfrmsubscribe::FormShow(TObject *Sender)
{
aa=funout;//指向窗体外的函数时没问题
//一下指向窗体内部成员函数的写法都不行,该怎么写啊?

aa =frmsubscribe->funin;
aa =funin
aa=Tfrmsubscribe::funin;

}

void Tfrmsubscribe::funin(TListItem * Item)
{
ShowMessage("IN");

}
void funout(TListItem * Item)
{
ShowMessage("out");

}

那位高手指点一下,我需要动态设置这个指针指向哪个函数!先谢过了
...全文
276 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshi0 2006-09-22
  • 打赏
  • 举报
回复
类内的函数除了static标识的以外,其余的函数都默认带有this指针的,所以真正的函数并不像表现的那样。

还有一点就是,由于在类内有继承机制,所以就算你将函数指针指向那个函数名,也要通过运行时来确定指针内容,而一般的函数指针是在编译时就确定内容的,这样一来,就很容易出现违规访问的现象。

由此,我并不知道任何一种办法获得类的成员函数的指针。
daydayup234 2006-09-22
  • 打赏
  • 举报
回复
就不能起个不一样的名字啊
找这个麻烦有必要?
wood542344 2006-09-22
  • 打赏
  • 举报
回复
mark,学习ing
勉励前行 2006-09-22
  • 打赏
  • 举报
回复
指向類內部的函數指針與C函數指針是不一樣的。不能同樣對待。
在BCB內,void (__closure *aa) (TListItem *);則閉包指針aa相當於兩個void*,前4個字節存放的是函數偏移量,後4個字節存放的是實例地址。用這兩者可算出函數調用地址。

而 C 函數指針則保存的是函數的地址,可以直接調用。
指向類內部的函數指針與__closure指針是一樣的處理,只是只能指向某個類。
類的靜態函數其處理是與C指針一樣。

柯本 2006-09-21
  • 打赏
  • 举报
回复
外部的函数指针可以通过__closure关键字来访问类内的函数,但要同是时内外访问就难了(以前研究过,有点忘记了),这样是肯定可以的
void (__closure *aa) (TListItem *);
...
aa= TForm1::funin;
...
另外,你可将窗体内的函数定义成static的,这样内外都可以访问到了
hejunbin 2006-09-21
  • 打赏
  • 举报
回复
把你的那个函数做成虚函数吧,com用的就是这样的,^_^
citybird888 2006-09-21
  • 打赏
  • 举报
回复
不行啊,楼上,还有没有别的办法啊?
Y___Y 2006-09-21
  • 打赏
  • 举报
回复
改成这个试一试
void (*Tfrmsubscribe::aa) (TListItem *);

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧