ALLJOYN WINDOWS下的一个天坑

问题

这个问题是这样出现,alljoyn的chat sample写得很简单,但是我移植到mfc application的时候就是出错

1
2
3
4
5
         /* Register signal handler */
        status  =  bus. RegisterSignalHandler ( this,
             static_cast <MessageReceiver :: SignalHandler > ( &ChatObject :: ChatSignalHandler ),
            chatSignalMember,
             NULL ) ;

以上一段代码,返回是结果是invalidate argument,但是问题是这个代码在原project当中,可是可以运行的啊。

过程
这个解决问题的过程实在是有很大的问题,有点漫无目的走,这个跟自己做事情有关系,就是做得不完美。
1)首先想到的是试试用console application,看看是不是有问题?结果一样存在
2)然后想着确保所有的visual studio 2012的选项都是一致的,结果还是一样存在(但是这一步是有问题的)
3)最后想着把alljoyn的源码拿到,自己编译,看看为毛同样的代码,我自己的sample调用就会出错,耗了1~2个小时搞定。
最后发现居然是产生的汇编代码都不一致。


00AEBC35 6A  00                 push         0  
00AEBC37 8B  45 EC              mov          eax , dword  ptr  [ this ]  
00AEBC3A 8B  48 1C              mov          ecx , dword  ptr  [ eax + 1Ch ]  
00AEBC3D  51                    push         ecx  
00AEBC3E  68 CE  95 AD  00        push         0AD95CEh  
00AEBC43 8B  55 EC              mov          edx , dword  ptr  [ this ]  
00AEBC46  52                    push         edx  
00AEBC47 8B 4D  08              mov          ecx , dword  ptr  [bus ]  
00AEBC4A E8 B9 FE FE FF        call        ajn ::BusAttachment ::RegisterSignalHandler  ( 0ADBB08h )

而自带的sample所产生的代码是:


00FD8B29 6A  00                 push         0  
00FD8B2B 8B  45 EC              mov          eax , dword  ptr  [ this ]  
00FD8B2E 8B  48 1C              mov          ecx , dword  ptr  [ eax + 1Ch ]  
00FD8B31  51                    push         ecx  
00FD8B32 8B  95  08 FF FF FF     mov          edx , dword  ptr  [ ebp - 0F8h ]  
00FD8B38  52                    push         edx  
00FD8B39 8B  85  04 FF FF FF     mov          eax , dword  ptr  [ ebp - 0FCh ]  
00FD8B3F  50                    push         eax  
00FD8B40 8B 4D EC              mov          ecx , dword  ptr  [ this ]  
00FD8B43  51                    push         ecx  
00FD8B44 8B 4D  08              mov          ecx , dword  ptr  [bus ]  
00FD8B47 E8  44  14  04  00        call        ajn ::BusAttachment ::RegisterSignalHandler  ( 01019F90h )  
00FD8B4C  89  45 E0              mov          dword  ptr  [status ] , eax

 最后总算发现了,验证compiler option一样的时候,忘记看那个addtional option了,然后addtional option当中使用了 mm  mg的选项,这两个选项导致了,
这种奇怪的4个参数,push 5个数据进去的情况。

总结
解决问题要抓住核心和本质,比如讲这个问题的核心就是两个版本一个版本行,另外一个版本不行,惟一的可能性就是编译选项的问题,比如讲我为何这么挫就是没有钱的原因。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值