OKWAVEパソコン版の推奨環境変更のお知らせ
  • 締切済み

ワイド文字列への変換

現在VC++ 2008 expess editionでDirectshowを使ってライブ配信されている動画を保存するプログラムを作成しています。 その際に HRESULT AddSourceFilter( LPCWSTR lpwstrFileName, LPCWSTR lpwstrFilterName, IBaseFilter **ppFilter ); という関数を使用していて、テキストファイルから読み込んだURLをlpwstrFilenameとしようとしています。 まずテキストファイルを使わずに #define URL L"mms://localhost:1024/" hr=pGraph->AddSourceFilter(URL, L"SourceFilter", &pSrc); とやった場合はうまく動作するのですが、 「mms://localhost:1024/」とだけ記述したURL.txtから読み込もうとした場合、 #define STR_MAX 256 char strs[STR_MAX]; fp = fopen("URL.txt", "r"); if (fp == NULL) { wprintf(L"sample.txt を開けませんでした。\n"); return EXIT_FAILURE; } while (fgets(strs, STR_MAX, fp) != NULL){} fclose(fp); printf("%s\n",strs); std::locale::global(std::locale("japanese")); wchar_t pwsz[sizeof(strs)*2]; MultiByteToWideChar(CP_ACP, 0, strs, strlen(strs), pwsz, sizeof(pwsz)); LPCWSTR Data = pwsz; std::wcout << Data << std::endl; hr=pGraph->AddSourceFilter(Data, L"SourceFilter", &pSrc); というようにやって実行した場合はstrsにもDataにも「mms://localhost:1024」がきちんと入っているようでしたが コンパイルは通ったものの実行してもソースが認識されませんでした これはワイド文字列への変換が間違っているのでしょうか?

みんなの回答

回答No.2

もとからfgetwsを使えばいいというわけではないの? (setlocale(LC_ALL, "Japanese");が必要ですが。)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

本題と関係があるかどうかはわかりませんが、 >while (fgets(strs, STR_MAX, fp) != NULL){} 最後の {} は、本当にそうなっているのですか? だとすると、ファイルを読み切るまで ループし続ける意図はどのあたりにあるのでしょうか?

関連するQ&A

専門家に質問してみよう