从CMake构建的SFML无法正常工作

时间:2014-05-22 19:10:42

标签: c++ visual-studio-2012 sfml

我已经从github成功构建了SFML,其中包含库和运行时的静态链接(从网站下载的那个动态链接到运行时,这要求用户在与Visual Studio一起使用时安装msvcrXXX.dll)。它工作正常,直到我开始使用我的代码。

问题是sf::RenderWindow::draw,当用sf::RectangleShape之类的东西调用时,它没有问题,并显示漂亮的彩色矩形。但是,当我开始使用我自己的类时,它会弹出一个错误。

类层次结构:

有一个基类如下:

class ButtonBase : public sf::Drawable{
public:
    virtual ~ButtonBase() {}
    virtual void callback(ButtonClickState) = 0;
    virtual void onHover(HoverState) = 0;
    virtual void draw(sf::RenderTarget&, sf::RenderStates) const = 0;
    virtual sf::Sprite& getBackground() const = 0;
    virtual LabelBase& getLabel() const = 0;
    virtual TooltipBase& getTooltip() const = 0;
    virtual void hide() = 0;
    virtual void show() = 0;
    virtual bool isHidden() const = 0;
    virtual int getZ() const = 0;
    virtual void setZ(int) = 0;
};

正如您所看到的,此类继承了sf :: Drawable,因此可以以某种方式使用继承ButtonBase的所有Buttons:window.draw(buttonInstance);

按钮看起来大致如下:

class Button final : public ButtonBase{
    mutable Label label;
    sf::Texture texture;
    mutable sf::Sprite buttonImage;
    mutable int z;
    bool active;
public:
    //constructors, destructors, whatnot

    void draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        if (active)
        {
            target.draw(buttonImage, states);
            target.draw(label, states);
            //target.draw(bTltp, states);
        }
    }

    //more stuff
};

大多数东西都无关紧要。我将问题归结为在函数返回/超出范围后调用Button内的绘图时,弹出此错误:

  

运行时检查失败#0 - ESP的值未在函数调用中正确保存。这通常是调用使用一个调用约定声明的函数的结果,函数指针使用不同的调用约定声明。

我使用默认的:cdecl约定。使用一些奇怪/其他约定,SFML是否使用SFML_LINK_STD_STATICALLY(或CMake中的那个标志调用)构建为真?

要注意,我已在预处理器宏中定义了SFML_STATIC标志,并且我使用了正确的(调试调试,普通版本和发布版本)库。

我非常确定此代码可以与从官方网站下载的动态链接库一起使用,因为我已经使整个项目完全有效。

0 个答案:

没有答案