我有一个为Win 32平台编写的C ++应用程序。我正在移植此代码以支持Windows CE for ARMV4I。
在下面一行,它会抛出" 0x80000002的异常:数据类型错位":
RemotePlatformImpl* platform = dynamic_cast<RemotePlatformImpl*>(&handle);
这里的句柄类型是PlatformHandle,但实际上它指向RemotePlatformImpl对象。 RemotePlatformImpl是PlatformHandle的子类。
以下是VS2005调试器的汇编代码:
RemotePlatformImpl* platform = dynamic_cast<RemotePlatformImpl*>(&handle);
421C4F34 ldr r3, [pc, #0x464]
421C4F38 ldr r2, [pc, #0x45C]
421C4F3C mov lr, #1
421C4F40 mov rl, #0
421C4F44 mov r0, r8
421C4F48 str lr, [sp]
421C4F4C bl 421D9970
如果需要任何其他信息,请告诉我。
复制问题的最小代码:
#include "stdafx.h"
#include <windows.h>
#include <commctrl.h>
#include <string>
using namespace std;
class PlatformHandle
{
public:
virtual ~PlatformHandle(){}
bool operator==(const PlatformHandle& that) const { return (this == &that); }
bool operator!=(const PlatformHandle& that) const { return !(this == &that); }
PlatformHandle(){}
};
class RemotePlatformImpl : public PlatformHandle
{
public:
virtual ~RemotePlatformImpl(){}
RemotePlatformImpl(string srvAddr, int ctrlPort, int dataPort): PlatformHandle(){}
};
void justTest( PlatformHandle& handle)
{
PlatformHandle& platform = dynamic_cast<RemotePlatformImpl&>(handle);
}
int _tmain(int argc, _TCHAR* argv[])
{
PlatformHandle* ph = new RemotePlatformImpl("",2020,2021);
justTest( *ph );
return 0;
}
答案 0 :(得分:2)
我通过在VS2005项目设置中启用开关来解决它:
Configuration Properties -> C/C++ -> Language -> Enable Run-Time Type Info