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

android studio 启动时候报:java.lang.IllegalStateException: failed to create a child event loop 问题解决

android studio 启动时候报:java.lang.IllegalStateException: failed to create a child event loop 问题解决今天电脑重装...
  • xiaoxing0828
  • xiaoxing0828
  • 2016年09月01日 16:51
  • 1342

adb bugreport -- Failed to get bugreportz version

今天在查看电量时候,需要导出5.0手机的bugreport。 结果出现了下面的错误日志,几个月前用的还是好好的啊。adb bugreport > xxx.log Failed to get bug...
  • mwq30123
  • mwq30123
  • 2016年12月26日 19:06
  • 2262

升级ADT报错,Working copy not locked; this is probably a bug, please report

出现此问题的解决办法是: 1.   打开Eclipse中的 Project->Properties->Java Build Path 菜单,在右侧面板中的"Source"选项卡,点击  工程名字/...
  • Jack_l1
  • Jack_l1
  • 2013年10月21日 10:17
  • 2497

Android Studio打开出错,Internal Error......failed to create a child event loop......

看清楚,是failed to create a child event loop报错内容 此时你在命令行ping一下www.baidu.com也是出错的,显示找不到主机,所以解决办法就水到渠成啦。 ...
  • HiccupHiccup
  • HiccupHiccup
  • 2016年03月23日 11:24
  • 1056

编译php报错cc: 编译器内部错误:已杀死(程序 cc1) Please submit a full bug report, with preprocessed source if appropri

报错信息7.0.23/ext/fileinfo/ -DPHP_ATOM_INC -I/usr/local/src/php-7.0.23/include -I/usr/local/src/php-7.0...
  • qq_32642039
  • qq_32642039
  • 2017年09月23日 14:50
  • 449

Working copy not locked;this is probably a bug,please report

使用MyEclipse进行Java开发,用SVN进行版本控制。代码修改完后执行Commit,然后Update,提示如下类似的错误: org.tigris subversion javahl.Clien...
  • zgmzyr
  • zgmzyr
  • 2010年05月03日 11:11
  • 13360

java.lang.IllegalStateException: failed to create a child event loop

0. Environment Netty 4.0, Windows 2003 Server with firewall disabled, and without any antivirus sof...
  • Derek_Zhang_
  • Derek_Zhang_
  • 2016年07月06日 17:25
  • 2242

failed to create a child event loop

系统、软件版本:windows7 64bit,intellij IDEA14.1.4 ;在使用Intellij IDEA的时候出现的问题,一次重启后,编译工程就会出现如题的错误:Error:Abnor...
  • fansy1990
  • fansy1990
  • 2015年10月07日 11:52
  • 7332

idea failed to create a child event loop

idea14 有时候编译出现错误 Error:Abnormal build process termination: 13:15:08,830 |-INFO in ch.qos.logback.c...
  • s569646547
  • s569646547
  • 2016年06月06日 13:31
  • 3437

AndroidStudio启动报错Failed to create a child event loop,eclipse无法连接到Android设备

搞了一小时没结果,终于搜到了防火墙的提示,看了一下昨天系统更新自己把防火墙打开了,气死人    java.lang.IllegalStateException: failed to create...
  • sdjianfei
  • sdjianfei
  • 2016年08月25日 09:22
  • 1117
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BUG Report: Failed When a Native Event is Unhooked with with Multi-Heritance
举报原因:
原因补充:

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