docsingl.cpp line210文件中的ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED))错误

vc6.0的程序,迁移到了vs2008,编译没有问题,但是在debug模式下,运行会报错,release模式下没问题。然后就问万能的谷哥和度娘,查找了很多文章,不过大部分都是互相抄来抄去,我结合两篇文章的指导,排除了这个问题,贴出来备查。

这个问题是资源引起的问题,据说是由于建立工程时选择了其他语言,后来又修改成中文,所以会有这个问题。我的工程里面查看了一下,有中文,英文,还有莫名奇妙的意大利文。我新建了一个中文的工程,然后对照两者的不同,进行修改。

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE 4, 2
#pragma code_page(936)
#endif //_WIN32

查找AFX_RESOURCE_DLL,大概会发现4-5处内容,然后注意红色字的部分,其他的地方格式不太一样,但是修改的内容是一样的

LANGUAGE 4, 2也可以写成LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

如果用宏,看起来会比较直观,不过vs2008里面,默认用的是数字。

这样修改完以后,发现问题依旧,继续搜索

#include "res\XXX.rc2"  // 非 Microsoft Visual C++ 编辑的资源 

是这里出问题了,由于包含的顺序问题,导致语言的问题,具体的我也说不清,详情可查看参考文章

#include "res\XXX.rc2"  // 非 Microsoft Visual C++ 编辑的资源

#include "afxres.rc"         // 标准组件

#include "afxprint.rc"       // 打印/打印预览资源

改成

 

#include "afxres.rc"         // 标准组件

#include "afxprint.rc"       // 打印/打印预览资源

#include "res\XXX.rc2"  // 非 Microsoft Visual C++ 编辑的资源

 

就可以了,其实就是调整了一下顺序,到此,问题解决

 

参考文章:http://www.wuroom.com/post/116/

http://www.codelast.com/?p=1888

 

 

 

转载于:https://www.cnblogs.com/junyuz/archive/2013/05/29/3105662.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 DLL 使用 LoadString 函数也是类似的,只需要将 hInstance 参数设置为 DLL 模块的句柄即可。 在 DLL 使用 LoadString 函数需要以下几个步骤: 1. 在 DLL 项目定义 String Table 资源,可以使用资源编辑器添加和编辑 String Table 的字符串。 2. 在 DLL 项目定义一个导出函数,该函数可以在其他应用程序调用,用于加载 String Table 的字符串资源。 ``` extern "C" __declspec(dllexport) int GetStringResource( HINSTANCE hInstance, // DLL 模块句柄 UINT uID, // 字符串资源 ID LPTSTR lpBuffer, // 缓冲区指针 int nBufferMax // 缓冲区大小 ) { return LoadString(hInstance, uID, lpBuffer, nBufferMax); } ``` 其,hInstance 表示 DLL 模块句柄,uID 表示字符串资源 ID,lpBuffer 表示缓冲区指针,nBufferMax 表示缓冲区大小。 3. 在其他应用程序调用 DLL 导出的函数,通过该函数加载 DLL 的字符串资源。 ``` HINSTANCE hDll = LoadLibrary(_T("MyDLL.dll")); if (hDll != NULL) { typedef int (*PFNGetStringResource)(HINSTANCE, UINT, LPTSTR, int); PFNGetStringResource pfnGetStringResource = (PFNGetStringResource)GetProcAddress(hDll, "GetStringResource"); if (pfnGetStringResource != NULL) { TCHAR szBuffer[256]; pfnGetStringResource(hDll, IDS_APP_NAME, szBuffer, sizeof(szBuffer)); MessageBox(hWnd, szBuffer, _T("提示"), MB_OK); } FreeLibrary(hDll); } ``` 其LoadLibrary 函数用于加载 DLL 模块,GetProcAddress 函数用于获取 DLL 导出函数的地址,pfnGetStringResource 表示导出函数地址,IDS_APP_NAME 表示字符串资源 ID,szBuffer 表示存储字符串的缓冲区。最后,调用 pfnGetStringResource 函数即可加载 DLL 的字符串资源。 需要注意的是,在 DLL 使用 LoadString 函数加载字符串资源时,需要使用 DLL 模块的句柄作为 hInstance 参数,而不是应用程序实例句柄。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值