文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
.NET频道
 资讯动态   ASP.NET   C#   ADO.NET   VC.NET   VB.NET   .NET Framework   WebService
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> VC.NET >> 文章正文
怎样将成员函数指针强制转换成void*指针?怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?
怎样将成员函数指针强制转换成void*指针?
怎样将成员函数指针强制转换成void*指针?怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?
怎样将成员函数指针强制转换成void*指针?怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?

    采用取成员函数指针的地址的方法,先把指向成员函数指针的指针强制转化为别的类型,如unsigned*,当然同样可以通过此转化后的指针经过相反的变换来调用成员函数。于是乎要转化为void*的问题也随之可解,如下示例:
/* VS2003下编译运行 */
class AbstractMethod
{
public:
 virtual void show(){}  // = 0;  // 可以是纯虚函数,这里为了测试方便不使用纯虚函数!

 void fun()
 {
  cout << "I was called!" << endl;
 }

 void fun1()
 {
  cout << "I was called!" << endl;
 }
};

int main()
{
 // 定义成员函数指针类型
 typedef void (AbstractMethod::*MFP)(void);

 // 转化函数指针为别的指针
 MFP mfp1 = &AbstractMethod::show; 
 unsigned* tmp =  (unsigned*)&mfp1;
 cout << hex << *tmp << endl;

 MFP mfp2 = &AbstractMethod::fun;
 tmp = (unsigned*)&mfp2;
 cout << hex << *tmp << endl;

 MFP mfp3 = &AbstractMethod::fun1;
 tmp = (unsigned*)&mfp3;
 cout << hex << *tmp << endl;

 // 通过转化后的指针调用成员函数
 AbstractMethod am;
 MFP* addr = (MFP*)tmp;
 (am.*mfp3)();
 (am.*(*addr))();

 return 0;
}

验证上述方法取得的成员函数地址是否正确:
1. 在调试是查看临时变量函数指针的值和输出的是否一样。
2. 可以根据调试时的反汇编进行结果验证。
3. 最好的办法就是如上例子通过转化后的指针来调用成员函数。

Copyright@戴维 2006.5  于北京 


怎样将成员函数指针强制转换成void*指针?怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 进入论坛讨论

    相关文章
    在VC++应用程序中读取文本数据
    缓冲区溢出还是问题吗?C++/CLI安全编码
    实例解析C++/CLI中的接口与泛型
    实例解析C++/CLI中的继承与枚举
    C++函数如何操作堆栈指针esp
    Pure C++:泛型编程:模板特殊化
    在托管C++中利用path对象处理Temp文件
    DotNet剖析系列——控件继承
    C++/CLI中有效使用非托管并列缓存
    Java版本和C++版本简单Stack程序
    VC 6.0 中还可以这样创建对话框
    三种常见中文内码的转换方法!
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 本站原创文章,转载时请注明出自文谷及作者姓名
    ③在本网BBS上发表言论者,文责自负。
    ④如您因版权等问题需要与本网联络,请在30日内联系 。
    怎样将成员函数指针强制转换成void*指针?怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?
    怎样将成员函数指针强制转换成void*指针?怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?2007-1-28 14:13:59怎样将成员函数指针强制转换成void*指针?

    全站热点
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷论坛
    Tel: 0577-65690019      E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2008 wengu.com 文谷 All Rights Reserved
    浙ICP备05000327号