我的论点如何被破坏?

所以我最近花了一些时间去学习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 = "|ð/"

一旦我注意到这一点,我首先想到它可能试图将指针解释为文字串数据; 这两个值从运行时变为运行时,但它们总是由一个字符相互关闭。 这有两个问题,第一,Visual Studio指出它们是带有“”标记的字符串,第二,正在创建的Image对象得到它的字符串很好,并且它接受了相同的const std :: string&type作为论据。 然后我认为这可能是我的项目中的一个问题,Ogre是在开启了多字节字符集的情况下编译的,而QuickGUI是使用Unicode编码的。 我重新编译,重新运行 - 同样的问题。

在这一点上,我不知道该怎么做。 这不是我用调用语法可以看到的问题,我查看了QuickGUI代码(可以在这里找到),我已经双倍,三倍,四重检查了我的编译设置,调查了执行std时潜在的编译器特定问题: :字符串,并在这个问题上整体打了我近一个星期的大脑无济于事。 如果任何人能够提供洞察力,为什么在上帝的绿色地球上,我的琴弦的价值正在不断变化,我会非常感激。

链接地址: http://www.djcxy.com/p/95453.html

上一篇: How are my arguments getting corrupted?

下一篇: Embedding a Low Performance Scripting Language in Python