我的论点是如何被破坏的?

时间:2011-06-23 08:07:32

标签: c++ ogre3d

所以我最近自己学习Lua来学习我正在研究的游戏项目(使用Visual Studio 2010和Ogre3D引擎定位Windows 7),大约在同一时间我开始实现我们选择的库。 GUI系统,QuickGUI。我决定将字体加载外包给lua作为学习经验并开始遇到错误。认为这是我对lua的经验不足,我花了几天时间研究问题可能是什么,但是当我在纯C ++中重现错误时,我遇到了同样的问题。

要启动QuickGUI的FontManager,我首先创建一个外观效果管理器和资源管理器的实例,然后使用它们创建QuickGUI :: Core对象,然后调用静态单例函数来获取指向FontManager对象的指针。然后我创建一个可用的字体,通过传递一个字符串,其中包含所请求的字体名称,一个Image对象表示* .png中呈现的字体,一个int来确定基线,以及描述个人的相关XML文件的名称字符。如下:

      GUIResourceManager* mGuiResourceManager = new GUIResourceManager();
      GUISkinEffectManager* skinEffectMgr = new GUISkinEffectManager();

      QuickGUI::Core* GUICore = new QuickGUI::Core(mGuiResourceManager, skinEffectMgr);

      QuickGUI::FontManager* fontMgr = QuickGUI::FontManager::getSingletonPtr();

      fontMgr->createFont("TimesNewRoman.14", mGuiResourceManager->getImage("TimesNewRoman.14.png"), 10,"fonts/TimesNewRoman.14.xml");

以下是QuickGUI :: FontManager类的相关函数:

Font* FontManager::createFont(const std::string& name, Image* i, unsigned int baseline, const std::string& fontXMLFile)
{
    if(mFontMap.find(name) != mFontMap.end())
    {
        Log::exception("FontManager::createFont : A font with name \"" + name + "\" already exists!");

        return NULL;
    }

    TiXmlDocument xmlDoc;
    xmlDoc.LoadFile(fontXMLFile);

    TiXmlElement* root = xmlDoc.LastChild()->ToElement();

    Font* newFont = new Font(name,i,baseline,root);

    mFontMap[name] = newFont;

    return newFont;
}

QuickGUI库使用TinyXML进行解析。我的程序在xmlDoc.LastChild() - > ToElement()调用时崩溃,因为xml无效。经过调查,我在调试中发现了一些奇怪的东西:我的字符串在某种程度上没有进入createFont()函数。这些是我在上面函数的开头设置断点后的参数值:

    Font* FontManager::createFont(const std::string& name, Image* i, unsigned int baseline, const std::string& fontXMLFile)

name = "¤ð/"
i = 0x0308a738{mName="TimesNewRoman.14.png" mOgreImage=0x00ca3d28}
baseline = 10
fontXMLFile = "|ð/"

一旦我注意到这一点,我首先想到它可能试图将指针解释为文字字符串数据;这两个值从运行时更改为运行时,但它们始终只由一个char关闭。这有两个问题,第一,Visual Studio表明它们是带有“”标记的字符串,第二,正在创建的Image对象正好字符串,它接受了相同的const std :: string&键入作为参数。然后我认为这可能是我的项目的一个问题,Ogre正在编译时打开了多字节字符集,而QuickGUI则改为使用Unicode。我重新编译,重新运行 - 同样的问题。

此时,我不知道该怎么办。这不是我用调用语法看到的问题,我查看了QuickGUI代码(available here),我对我的编译设置进行了双重,三重,四重检查,调查了潜在的编译器特定问题与实现std :: string,并且在这个问题上整体打败了我的大脑将近一个星期无济于事。如果有人能够提供有关为什么在上帝的绿色地球中,我的弦的价值正在不规则地改变,那么我将非常感激。

0 个答案:

没有答案