我有一个方法指针如下:
typedef void (MMsnInternalCallBacks::* FuncPtr)();
FuncPtr iSoapActionComplete;
我通过指针iSoapActionComplete调用下面的方法,如下所示:
(iCallbacks.*iSoapActionComplete)( );
在我的Symbian S60 3rd Ed模拟器上,该功能被称为“Memory Full。尝试关闭某些应用程序”消息。
知道为什么会发生这种情况。
答案 0 :(得分:2)
如果没有通过方法指针直接调用函数,该函数是否有效?
该消息的一个可能原因是该函数正在离开KErrNoMemory
,即-4
,并且应用程序框架陷阱线束将捕获该假,从而产生适当的对话框。
例如,当operator new(TLeave)
无法分配内存或将零参数传递给User::LeaveIfNull()
时,就会发生这种假。有时,您甚至可以看到明确的User::Leave(KErrNoMemory)
来电。
您可以TRAP()
回调函数调用以自行捕获。更好的是,您应该修复功能本身,以免在正常的晴天情况下离开。
(另外,按照惯例,离开函数具有L
后缀。由于您使用i
前缀作为实例数据,您可能已经了解Symbian C ++命名约定。)