| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2837 人关注过本帖
标题:DLL全局变量问题
只看楼主 加入收藏
rohalloway
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:97
专家分:405
注 册:2018-9-28
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:2 
DLL全局变量问题
声明为局部变量时程序正常:
程序代码:
extern "C" __declspec(dllexport) bool showDialog(DWORD address, LPDWORD bytes, HWND parent )
{
    DWORD wrote = 0;
    WriteProcessMemory(GetCurrentProcess(), UlongToPtr(address), bytes, 6, &wrote);

    UserOnInject();

    QWinWidget win(nullptr); //声明为局部变量时程序正常
    win.showCentered();

    SroDlg dlg(&win);
    MyGlobalShortCut *shortcut = new MyGlobalShortCut("F5");
    QObject::connect(shortcut, SIGNAL(activated()), &dlg, SLOT(activated()));
    dlg.exec();

    return TRUE;
}



声明为全局变量时程序崩溃:
程序代码:
QWinWidget win(nullptr); //声明为全局变量时程序崩溃

extern "C" __declspec(dllexport) bool showDialog(DWORD address, LPDWORD bytes, HWND parent )
{
    DWORD wrote = 0;
    WriteProcessMemory(GetCurrentProcess(), UlongToPtr(address), bytes, 6, &wrote);

    UserOnInject();

   
    win.showCentered();

    SroDlg dlg(&win);
    MyGlobalShortCut *shortcut = new MyGlobalShortCut("F5");
    QObject::connect(shortcut, SIGNAL(activated()), &dlg, SLOT(activated()));
    dlg.exec();

    return TRUE;
}


请问 QWinWidget win(nullptr) 声明为全局时程序为什么会崩溃?
可编译通过,运行时错误。
这个问题同样适用于 SroDlg dlg(&win),但原始类型不会崩溃。

当showDialog()函数结束后,我仍然需要win和dlg对象,但声明为局部就销毁了

请问我该如何做? 蒙蒙的,请无视Qt的代码,我感觉这属于C++的问题,谢谢您!
搜索更多相关主题的帖子: 全局变量 声明 address win 崩溃 
2019-05-10 14:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:20 
如果是第二次调用才出错,那么就是 win 需要清洗才可以继续调用showCentered
如果是第一次调用就出错,那么就是 win 创建时必要的环境还没建立,因为它是全局变量,它创建比别人(比如QApplication)早。
2019-05-10 16:00
rohalloway
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:97
专家分:405
注 册:2018-9-28
收藏
得分:0 
以下是引用rjsp在2019-5-10 16:00:44的发言:

如果是第二次调用才出错,那么就是 win 需要清洗才可以继续调用showCentered
如果是第一次调用就出错,那么就是 win 创建时必要的环境还没建立,因为它是全局变量,它创建比别人(比如QApplication)早。


如您所说,应该是属于第二种情况,非常感谢您,一语击中,谢谢。
2019-05-15 19:47
快速回复:DLL全局变量问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041067 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved