如果您只是在寻找 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。是的,编译器会停止抱怨,但它会产生不良行为。您也可以将 anint
转换为 a 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
我在上面的代码中添加了错误处理,但实际上你应该学习阅读文档以及如何调试。这是一个非常基本的使用场景,知道如何查找错误至关重要。