BUG Report: Failed When a Native Event is Unhooked with with Multi-Heritance

原创 2004年07月09日 08:49:00

SYMPTOMS

当在一个使用多继承类作为event_receiver的未托管应用程序中unhook (__unhook) 一个native events时, 将会失败。__unhook将返回1(表明没有成功地unhook。在应用程序结束以后native event机制造成了内存泄漏.

CAUSE

这个问题发生在事件的接受者(event_receiver)是多继承类的情况下。在unhook的时候event的注入代码无法正确比较成员函数指针。

WORKAROUND

这个问题可以使用下面的代码重现:

#include <stdio.h>

class A
{
 int a;
};

class B
{
 int b;
};

[event_source(native)]
class CSource
{
public:
   __event void MyEvent(int nValue);
};

[event_receiver(native)]
class CReceiver : public A, public B //多继承
{
public:
   void MyHandler1(int nValue) {
      printf("MyHandler1 was called with value %d./n", nValue);
   }

   void MyHandler2(int nValue) {
      printf("MyHandler2 was called with value %d./n", nValue);
   }
};

int main() {
   CSource source;
   CReceiver receiver;

   __unhook(&CSource::MyEvent, &source, &CReceiver::MyHandler2, &receiver);
   __hook(&CSource::MyEvent, &source, &CReceiver::MyHandler1, &receiver);
   __raise source.MyEvent(1);
   __unhook(&CSource::MyEvent, &source, &CReceiver::MyHandler1, &receiver);//失败
   __hook(&CSource::MyEvent, &source, &CReceiver::MyHandler2, &receiver);
   __raise source.MyEvent(2);
   __unhook(&CSource::MyEvent, &source, &CReceiver::MyHandler2, &receiver);//失败
 
}

运行结果

MyHandler1 was called with value 1.
MyHandler2 was called with value 2.
MyHandler1 was called with value 2.

MyHandler2没有被正确unhook。

The information in this article applies to:

  • Microsoft Visual C++ .NET (2002)
  • Microsoft Visual C++ .NET (2003)
  • Visual C++ 2005 Express Edition Beta

使用Unity3D是创业团队失败的原因吗?

第一个项目虽然失败了,但是最起码成功上线,并且获得了一定的收入(虽然杯水车薪),也因为第一个项目拉来了投资。但是第二个项目就彻彻底底的胎死腹中了。         没有检讨、没有总结,大家自然而然而...
  • langresser
  • langresser
  • 2014年07月18日 14:30
  • 3599

Android 4.2 Input Event事件处理流程<一>事情派发

事件的开始是从eventhub开始的,我们先来看下流程图
  • new_abc
  • new_abc
  • 2014年08月07日 20:17
  • 5815

如何编写更佳的bug report

如何编写更佳的bug report   --- MihirKamdar《HowTo Write Better Bug Reports》   我们是否经常看到开发人员针对我们归档的bug r...
  • A8572785
  • A8572785
  • 2013年04月25日 15:42
  • 590

调试系列1:bugreport源码篇

framework/native/cmds/bugreport/bugreport.cpp framework/native/cmds/dumpstate/dumpstate.cpp framewor...
  • u010164190
  • u010164190
  • 2017年06月06日 10:58
  • 563

appium源码分析(八)-touch

摘要这次主要分析的对象时touch功能,如touchMove、touchUp、touchDown、touchLongClick。查看这些源代码的时候你会发现,他们都是继承于TouchEvent的这个类...
  • qq744746842
  • qq744746842
  • 2015年08月31日 13:21
  • 676

【Fiddler】几个接函数的基础方法解析

转自:http://blog.csdn.net/caicheng_119/article/details/51408213 1、List oAllSessions = new List();...
  • u014234260
  • u014234260
  • 2017年06月21日 14:48
  • 180

一个脚本引发的血案

我们本身是一家互联网金融公司,公司的主流业务就是p2p,因为各种原因吧,15年底启动建设众筹平台。考虑到前期开发过程中的一些弊端和架构经验,本次架构引用了dubbo做soa服务的治理,web容器ngi...
  • ityouknow
  • ityouknow
  • 2017年03月02日 08:55
  • 4922

bug report的注意要点

今天朋友的公司的团队要建立,问到偶bug的管理,于是顺便小结一下,做bug report的注意要点,有如下这些.首先是bug的一般形式,实践表明,最好是按如下的形式去搞一个bug   bug编号: b...
  • jackyrongvip
  • jackyrongvip
  • 2013年07月01日 16:19
  • 458

Itellij IDEA启动报错

打开idea启动报错: Internal error. Please report to http://jb.gg/ide/critical-startup-errors java.lang.I...
  • u013361361
  • u013361361
  • 2016年01月05日 19:18
  • 8586

React Native调试与打包发布

打包流程:   1.生成一个签名密钥   keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyal...
  • hunannanhu
  • hunannanhu
  • 2017年03月26日 12:10
  • 2255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BUG Report: Failed When a Native Event is Unhooked with with Multi-Heritance
举报原因:
原因补充:

(最多只允许输入30个字)