VCについておしえてください。DLLを書いていてある関数はワイド文字を引数に受け取り、ファイルにマルチバイトで書き込む関数です。コンパイルはとおりますが実行時にエラーとなり、プログラムが落ちます。解決のためにdllではなく、普通のプログラムを書きましたが正しく文字セット変換が出来ません。wcstombsが-1を返してエラーになります。どうしてでしょうか?引渡しの文字列をL""でワイド文字とできるのでしょうか? コンパイルオプションはマルチバイト文字で設定しています。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>//setlocale( LC_CTYPE, "jpn" )のため
FILE *fpw1x;
int OutW(const wchar_t *str){
char strdummy[1000];
int i=wcstombs(strdummy,str,1000);
fputs(strdummy,fpw1x);
return 0;
}
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){
if ((fpw1x = fopen("C:\\TEST.TXT", "a")) == NULL) {}
wchar_t* str=L"あいうえお";
OutW(str);
fclose(fpw1x);
}
試しに、
//wchar_t* str=L"あいうえお";
wchar_t* str=L"abc";
と、してみてください。
正しく変換されているようであれば、日本語文字列の場合に変換に失敗している可能性があります。
その場合、以下のロケール指定が行われているか確認をお願いします。
setlocale( LC_CTYPE, "jpn" );
<参考情報>
■ C言語 ワイド文字列からマルチバイト文字列に変換 - stdlib.h - [ wcstombs ] | 勇躍のゴミ箱
http://simd.jugem.jp/?eid=122