none
Failed to create empty document. RRS feed

  • 问题

  • 我有一个项目是从VC6.0移植到VS2010,现在运行DEBUG时没有问题。
    但在RELEASE是就会提示“Failed to create empty document.”。

    我的界面是重绘的,并且单独生成资源DLL,在开始时动态加载,所以不使用MFC的资源。
    现在确定问题,是动态载入资源的关系。

    	GetPrivateProfileString("Init","Language","english",m_sLanguage.GetBuffer(50),50,INIFILE);
    	m_sLanguage.ReleaseBuffer();
    	m_sLanguage.MakeLower();
    	
    	if (-1 < m_sLanguage.Find("chinese")) 
    	{
    		m_hLanguage = AfxLoadLibrary(".\\data\\chinesedll.dll");
    		if (m_hLanguage)
    		{
    			AfxSetResourceHandle(m_hLanguage);
    		}
    		else//DLL LOSE
    		{
    			AfxMessageBox("There isn't chinese!");
    		}
    	}
    	else if (-1 < m_sLanguage.Find("english"))
    	{
    		m_hLanguage = AfxLoadLibrary(".\\data\\englishdll.dll");
    		if (m_hLanguage)
    		{
    			AfxSetResourceHandle(m_hLanguage);
    		}
    		else//DLL LOSE
    		{
    			AfxMessageBox("There isn't english!");
    		}
    	}
    	else	//默认加载为英语
    	{
    		m_hLanguage = AfxLoadLibrary(".\\data\\englishdll.dll");
    		if (m_hLanguage)
    		{
    			AfxSetResourceHandle(m_hLanguage);
    		}
    		else//DLL LOSE
    		{
    			AfxMessageBox("There isn't this language!");
    		}
    	}
    
    

    以上是动态载入资源DLL的源代码,屏蔽就没有问题,但这是我需要的功能啊,因为要中英文双语版本。

    难道VS2010的载入资源和VC6.0不同吗?

    谁能告诉我这是为什么,该怎么解决啊!!!!


    在VS输出目录中有这样的提示:
    “OpteeQ.exe”: 已加载“E:\OpteeQ\Release\data\chinesedll.dll”,未使用调试信息生成二进制文件。
    “OpteeQ.exe”: 已加载“E:\OpteeQ\Release\data\ETHERNETDLL.dll”,未使用调试信息生成二进制文件。
    这两个DLL就是资源的,未使用调试信息生成二进制文件??这是什么意思??

    2011年10月31日 0:32

答案

  • 我觉得不应该是这个位置的原因

    如果说debug版没有问题而release出问题的话应该检查所有在release下屏蔽掉的宏的位置


    新浪微博http://weibo.com/xianglitian,欢迎围观
    • 已标记为答案 王译 2011年10月31日 7:23
    2011年10月31日 1:09
  • 由于你加载了这些 DLL 导致你的程序布局的改变,这种错误多半是悬空指针类似的问题引起的。

    不能因为加载这些 DLL 出现问题,就认为之这里的问题。

    这就好像 Debug 版本没有问题,而 Release 版本有问题的现象是一致的。

    也就是,程序是有问题的,但是这些问题在不同的时候引起的现象是不一致的。

    就好像,你的程序里有棵地雷,你只要不踩到就没有问题。

    同样,任何程序都有 BUG,只要不踩到就没有问题。

     

    // 我建议你看看你的整个程序,同时 简化这些 ChineseDLL 之类的DLL,看看。


    我也有自己的签名档哦!
    • 已标记为答案 王译 2011年10月31日 7:24
    2011年10月31日 3:13
  • 应该是VC6.0与VS2010的框架有不同,现在我是新建一个MFC工程然后将代码一点一点的移植过去,尤其是不改动自动生成的代码框架,基本可以还有一些小问题。
    • 已标记为答案 王译 2011年10月31日 7:22
    2011年10月31日 7:22

全部回复

  • 我觉得不应该是这个位置的原因

    如果说debug版没有问题而release出问题的话应该检查所有在release下屏蔽掉的宏的位置


    新浪微博http://weibo.com/xianglitian,欢迎围观
    • 已标记为答案 王译 2011年10月31日 7:23
    2011年10月31日 1:09
  • 这两个DLL就是资源的,未使用调试信息生成二进制文件??这是什么意思??
    ---------------------------------------------------------------------
    这个是指在模式下调试时设置断点也不管用。你的是不是Debug版本的?


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年10月31日 2:56
    版主
  • 由于你加载了这些 DLL 导致你的程序布局的改变,这种错误多半是悬空指针类似的问题引起的。

    不能因为加载这些 DLL 出现问题,就认为之这里的问题。

    这就好像 Debug 版本没有问题,而 Release 版本有问题的现象是一致的。

    也就是,程序是有问题的,但是这些问题在不同的时候引起的现象是不一致的。

    就好像,你的程序里有棵地雷,你只要不踩到就没有问题。

    同样,任何程序都有 BUG,只要不踩到就没有问题。

     

    // 我建议你看看你的整个程序,同时 简化这些 ChineseDLL 之类的DLL,看看。


    我也有自己的签名档哦!
    • 已标记为答案 王译 2011年10月31日 7:24
    2011年10月31日 3:13
  • 不是,很确定是RELEASE版的DLL
    2011年10月31日 3:43
  • 应该是VC6.0与VS2010的框架有不同,现在我是新建一个MFC工程然后将代码一点一点的移植过去,尤其是不改动自动生成的代码框架,基本可以还有一些小问题。
    • 已标记为答案 王译 2011年10月31日 7:22
    2011年10月31日 7:22