如何使用MFC在WinCE 6.0应用程序中生成文本文件?

时间:2012-11-28 11:55:21

标签: visual-c++ mfc windows-ce

我正在尝试通过我的代码创建一个文本文件。文件已创建,但其扩展名不同(不是.txt)。然后在搜索时我发现这可能是因为MFC运行时。

我在C:\ program Files \ Windows CE tools \ SDK中搜索了MFC Runtimes,但我无法在那里找到MFC文件夹。我该怎么办?我应该从哪里加入MFC Runtimes?

这是我正在使用的文本文件生成代码:

 void CFormRight::OnBnClickedButtonTextfile()
 {
    CFile File;
    char cFileAddr[100] = {"My Device\\Label.txt"};
    File.Open((LPCTSTR)cFileAddr, CFile::modeCreate | CFile::typeBinary |CFile::modeWrite | CFile::shareDenyNone);
    File.Write("Hello World", 15);
    File.Close();       
 }

1 个答案:

答案 0 :(得分:1)

如果您只是在寻找DLL,请尝试在此处查看您的开发计算机:

%PROGRAM_FILES%\Microsoft Visual Studio 9.0\VC\ce\dll

这可以让你获得实际的库。可以通过多种方式将它们包括在OS映像中。通常,您可以将它们添加到您的平台或项目BIB文件中。

尽管如此,我认为它不会解决您的文件扩展问题。如果您正在创建一个文件并且它显示出来,只是没有扩展名,它与MFC在那里没有任何关系,它与您的代码或您确定没有扩展名的方式有关(在资源管理器中打开“隐藏文件扩展名”?)。要解决这个问题,我们需要查看代码。

**编辑**

Windows CE严重偏向于Unicode。几乎所有Win32 API都只暴露了Unicode变体,因此您的代码也应该倾向于Unicode,这意味着您传递的字符串最终将在API调用时应该是Unicode。

其次,在抱怨时你不应该忽略编译器。你在那里的演员我打赌是由于编译器投诉,这是不正确的。如果您的原始代码是这样(请注意第一个参数缺少强制转换):

File.Open(cFileAddr, CFile::modeCreate | CFile::typeBinary |
                     CFile::modeWrite | CFile::shareDenyNone);

然后你会得到一个编译器错误:

error C2664: 'CFile::Open' : cannot convert parameter 1 from 'char [100]' to 'LPCTSTR'

那是因为在Windows CE下,Open正在寻找一个宽(Unicode)字符串。你有一个ANSI字符串。您不能像通过简单的直接转换那样从ANSI转换为Unicode。是的,编译器会退出抱怨,但它会导致不良行为。您也可以将int投射到char[],但这并不意味着它适用于API。

所以改变你的代码以使用宽字符串,一切都会起作用:

CFile File;
CFileException ex;
wchar_t cFileAddr[100] = TEXT("My Device\\Label.txt");
if(!File.Open(cFileAddr, CFile::modeCreate | CFile::typeBinary | 
                     CFile::modeWrite | CFile::shareDenyNone))
{
    wchar_t error[1024];
    ex.GetErrorMessage(error, 1024);
    cout << "Error opening file: ";
    cout << error;
    return;
}

File.Write("ID Technologies", 15);
File.Close();       

请注意wchar_t的使用,使用TEXT宏的初始化以及Open调用中缺少广播。

编辑2

我在上面的代码中添加了错误处理,但实际上你应该学习read the documentation以及如何调试。这是一个非常基本的使用场景,知道如何查找错误至关重要。

相关问题