1

コードを使用してテキストファイルを作成しようとしています。ファイルは作成されますが、拡張子が異なります(.txtではありません)。次に検索すると、これはMFCランタイムが原因である可能性があることがわかりました。

C:\ program Files \ Windows CE tools \ SDKでMFCランタイムを検索しましたが、MFCフォルダーが見つかりません。私は何をすべきか?どこからMFCランタイムを含める必要がありますか?

これが私が使用しているテキストファイル生成コードです:

 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();       
 }
4

1 に答える 1

1

DLLを探しているだけの場合は、ここで開発マシンを探してみてください。

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

それはあなたに実際のライブラリを取得します。それらをOSイメージに含めるには、さまざまな方法があります。通常、それらをプラットフォームまたはプロジェクトのBIBファイルに追加します。

それでも、ファイル拡張子の問題は解決しないと思います。ファイルを作成していて、拡張子がないだけで表示される場合は、MFCが存在するかどうかとは関係ありません。コード、または拡張子がないと判断する方法と関係があります(エクスプローラーで「ファイル拡張子を隠す」がオンになっていますか?)その問題を解決するには、コードを確認する必要があります。

** 編集 **

WindowsCEはUnicodeに大きく偏っています。ほぼすべてのWin32APIは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に変換することはできません。はい、コンパイラは文句を言うのをやめますが、それは悪い振る舞いをします。にキャストすることもできますがintchar[]それが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

上記のコードにエラー処理を追加しましたが、実際には、ドキュメントとデバッグ方法を読むことを学ぶ必要があります。これは非常に基本的な使用シナリオであり、エラーを探す方法を知ることは重要です。

于 2012-11-28T14:01:27.230 に答える