[Interest] calling QMessageBox::warning() may break the DLL detaching on VS2010

Andrew Xu xulei.js at gmail.com
Fri Nov 16 02:49:17 CET 2012


Hi All,

I'm the author of this thread. Because I didn't receive the confirmation
mail using 126.com mailbox, I changed to gmail mailbox.

Seems the ::MessageBox comfused us, ok, forget it please.

I found the issue when a destructor of a local static object wasn't called
when my first Qt program exiting after calling QMessageBox::warning(). If I
didn't called QMessageBox::warning(), the destructor was called normally.

I modified the demo program. explain it here.

1.       Create a “Qt Application” project (named QtTest) in VS2010 by Qt
Add-in with default settings.

2.       Add an action, and call QMessageBox::warning() in its slots.

3.       Create another DLL project (named MyDll) in VS2010, with a single
export function (named foo).

class MyObj
{
public:
    ~MyObj() {
        printf("destructor called.\n");
    }

    void test() {
        printf("test() called\n");
    }
};


void foo()
{
    static MyObj obj;
    obj.test();
}

4.       Call the exported function “foo()” in QtTest project.

     QtTest::QtTest(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    // foo is exported in MyDll.dll, to make sure MyDll.dll is loaded
    foo();
}
5.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20121116/be3756ae/attachment.html>


More information about the Interest mailing list