[MSVC]遇到std :: __ non_rtti_object异常

时间:2014-07-29 03:19:08

标签: c++ visual-studio-2010 visual-c++ dll rtti

在我的情况下,我编写了一个Kernel.dll,它包装了xImage.dll中定义的CxImage对象(CxImageJPG或CxImage),该对象与其他二进制模块共享(无源代码):

class CCxImageWraper{
  public:
    shared_ptr<CxImage> m_spImage;
    ...
}

当我使用dynamic_cast时,它失败并出现std::__non_rtti_object异常:

m_spImage.reset(new CxImageJPG);  // always std::__non_rtti_object exception
CxImageJPG* cxJpgImage = dynamic_cast<CxImageJPG*>(m_spImage.get());

我确信kernal.dll项目使用选项/GR (Enable Run-Time Type Information),并且这里的指针m_spImage.get()不是NULL,它肯定指向CxImageJPG instatance。 不知道为什么抛出std :: __ non_rtti_object我遗失了哪些信息?

我尝试创建新的控制台项目Test.exeTestDll.dllTest.exe始终打开GR切换,TestDll.dll有两个类:{{1 }},BaseClass,我设置为SubClass的任何选项:TestDll.dll/GR/GR-/MT/MDd。 Test.exe始终可以dynamic_cast /MTd中定义的对象:

TestDll.dll

已经检查过问题,但无法找到有关我的问题的更多信息:

0 个答案:

没有答案