使用静态lib里面的全局变量

youngwolf 2009-04-14 10:34:58
一个静态lib——global.lib,里有一个全局变量g_state(简单变量,DWORD类型)

现在有一个对话框工程——dlg.exe
一个静态lib工程——sl1.lib
一个静态lib工程——sl2.lib

dlg.exe需要连接sl1.lib和sl2.lib
sl1.lib和sl2.lib都需要g_state,于是他们通过extern DWORD g_state来使用

上面得到的dlg.exe运行正常。


现在的情况是,dlg.exe也需要g_state了,于是它也通过extern DWORD g_state将g_state引进来,也把global.lib引了进来,
编译连接都通过,可是一运行就出错!出错的代码如下:
CDocument* CWinApp::OpenDocumentFile(LPCTSTR lpszFileName)
{
ASSERT(m_pDocManager != NULL); //这里为空
return m_pDocManager->OpenDocumentFile(lpszFileName);
}
也就是说在AfxWinMain里面有出错了!
可以肯定是将g_state引进来造成的错误,但不是使用错误,因为将引进来的g_state放在任何地方去使用一下(其实程序完全没有运行到),也会出错,比如:
if (0)
{
DWORD d = g_state; //使用一下
}

不知道这个问题能否解决,如果不能解决,有什么其它方法来替代?
...全文
362 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
在App类InitInstance函数中,调用AddDocTemplate时会分配m_pDocManager,你在这里设置一个断点,然后单步调试程序,监视m_pDocManager什么时候被改变。
[/Quote]
经验之谈呀
zhoulehua 2009-04-16
  • 打赏
  • 举报
回复
顶顶。
biweilun 2009-04-16
  • 打赏
  • 举报
回复
在dlg.exe为g_state弄一个全局指针指向它,不直接使用g_state。
cnzdgs 2009-04-16
  • 打赏
  • 举报
回复
在App类InitInstance函数中,调用AddDocTemplate时会分配m_pDocManager,你在这里设置一个断点,然后单步调试程序,监视m_pDocManager什么时候被改变。
bragi523 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyljerry 的回复:]
通过lib的函数去访问g_state...
[/Quote]
wutaihua 2009-04-15
  • 打赏
  • 举报
回复
mark
oyljerry 2009-04-14
  • 打赏
  • 举报
回复
通过lib的函数去访问g_state...
黄志义 2009-04-14
  • 打赏
  • 举报
回复
MARK 再想想

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧