::LoadString() 函数从资源中提取一个字符串拷贝至缓冲区中。现在有这么一个问题,它是怎么工作的呢?或者说,字符串资源在模块中是如何存放的。按照我的理解,一般字符串是以零为结束标志,常见的字符串处理函数也都是按照这个原则工作。平时也都没什么奇怪。当我试图打开一个CommonOpenFileDialog时,问题产生了。
GetOpenFileName() / GetSaveFileName() 的参数类型 OPENFILENAME,其中的 Filter 是一个以0为分隔符的字符串(真不知道当初设计函数时微软怎么想的)。当我试图将Filter的内容作为字符串资源放在dll中时,使用LoadString()可以正常读取,并且返回正确的总长度。完全没有异常!问题就在这里,这个字符串中间有若干0,如果LoadString()以0为字符串结束标志,那么它是如何得到完整的串的呢?
GetOpenFileName() / GetSaveFileName() 的参数类型 OPENFILENAME,其中的 Filter 是一个以0为分隔符的字符串(真不知道当初设计函数时微软怎么想的)。当我试图将Filter的内容作为字符串资源放在dll中时,使用LoadString()可以正常读取,并且返回正确的总长度。完全没有异常!问题就在这里,这个字符串中间有若干0,如果LoadString()以0为字符串结束标志,那么它是如何得到完整的串的呢?
解决方案 »
- 同样的程序,在另一台机器上不能运行
- 发现很多时候不需要CoInitialize也可以去调用一些COM的功能啊。
- 请教高手:VC,如何让编辑框中显示的初始值为浅灰色,且在用户点击鼠标时,自动清除文本或选中变蓝。
- 【急切求助】帮忙区别C++和C#中的null和""(空字符串)?
- 如何点击一个对话框中的一个按钮弹出另外一个对话框?
- 一个送分的SDK小问题!~~~
- 讨论关与句柄的问题(handle)
- Direct3DCreate8(D3D_SDK_VERSION)不能建立LPDirect3d8对象,为什么?
- 如何直接获取一个控件对于其父窗口的相对坐标,而不是相对于整个屏幕的坐标?
- 新手请教一个问题,下面的函数怎么加到VC里面去
- CFormView的窗口,我用GetParentFrame()->SetWindowText("TITLE");居然不变,怎么回事?
- VBScript幼稚问题!(在线等)
2 你说的情况不是字符串,而是“字符串组”,在注册表中就有这样的数据类型。LoadString对这个试支持的,所以你能试验成功。
参考:
自己写,不要使用MFC的类,MFC很多意外情况。
================================================== FILE *pSourFile; //指向源文件
CString sSourLine=""; //从源文件中取出的一行 pSourFile = fopen(sFileName,"rt");
if(pSourFile==NULL) {
AfxMessageBox("源文件打开失败!");
return false;
}
while(!feof(pSourFile)){
ReadLine(pSourFile, sSourLine);//读一行
}
}
//读取文件的一行
void CSetEx::ReadLine(FILE *pFile, CString &line)
{
line="";
char ch;
int pos=0;
while(!feof(pFile)){
//Read(&ch,1);
ch = fgetc(pFile);
if(ch=='\r'||ch=='\n')break;
line+=ch;
pos++;
if(line.Find("", 0))
{
ftell(pFile);
}
}
line.TrimRight('\r');
line.TrimRight('\n');
line.TrimRight('\r');
line.TrimRight(0xff); //过滤文件结束符
return;
}或者:
CStdioFile file;
if(file.Open(_T(m_sAppPath+"\\text"),CFile::modeReadWrite))
{
CString sss;
DWORD o=0;
int ol=0;
while(file.ReadString(sss))
{
if(find.FindFile(m_sAppPath+"\\text"))
m_cbBkGround.AddString(sss);//sss即为一行
}
}