2011-12-03 15 views
0

以前はワイド文字を使用していませんでした。他の人のコードは次のとおりです。Win32 strange widecharの動作

char moduleFileName[512]; 
int size = ::GetModuleFileName(NULL,moduleFileName,sizeof(moduleFileName)); 
char c_drive[256]; 
char c_dir[256]; 
_splitpath_s(moduleFileName,c_drive,sizeof(c_drive),c_dir,sizeof(c_dir),NULL,0,NULL,0); 
root = c_drive; 
root.append(c_dir); 

wchar_t moduleFileNameW[512]; 
int sizeW = ::GetModuleFileNameW(NULL,moduleFileNameW,sizeof(moduleFileNameW)); 
wchar_t w_drive[256]; 
wchar_t w_dir[256]; 
_wsplitpath_s(moduleFileNameW,w_drive,sizeof(w_drive),w_dir,sizeof(w_dir),NULL,0,NULL,0); 
wroot = w_drive; 
wroot.append(w_dir); 

SEVEN_ZIP_EXE = wroot; 
SEVEN_ZIP_EXE += L"\\7z.exe"; 

ここでポイントは変数を7z.exeファイルの場所に設定することです。私がWindows 7 Prof. 64ビットシステムでデバッグすると、wrootの無効な文字のように見えます。

﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾ ﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾﻾쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌 쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌 쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌 Blockquote

+0

SEVEN_ZIP_EXEはstd :: wstringですか? –

+0

コードは確かに – James

+0

std :: wstring SEVEN_ZIP_EXE = L ""であるため、動作はおそらく奇妙です。 –

答えて

0

sizeofを_countofに変更すると、奇妙なデータの問題が修正されます。

あなたは機能の両方のセットを必要としません。アプリケーションに適したセットを使用してください。 SEVEN_ZIP_EXEをwstringにする必要がある場合は、その文字を削除することができます。

0

問題はのsizeofで、あなたが本当にこのはsizeof(w_dir)を使用したい場合は/はsizeof(wchar_t型)

私は何をしようとする集まるあなたの実行可能ファイルを含むディレクトリを取得することです。 よりもむしろ不器用SPLITPATHを使用して、私は次のことをお勧め: -

TCHAR szBuff[FILENAME_MAX]; 
TCHAR *ShortName; 
GetFullPathName(moduleFileName, FILENAME_MAX, szBuff, &ShortName); 
*(ShortName-1) = '\0'; // remove exe from path 

szBuffは名にディレクトリが含まれており、短縮名のポイントになります。

上記のコードは、TCHARとの#define UNICODEを使用しますが、wchar文字名に関数名を変更することができます。

+0

関数呼び出しでFILENAME_MAXを使用するコーディングが貧弱です。 _countof(szBuff)変数でMicrosoft定義のマクロを使用する方が良いです。そうすれば、FILENAME_MAXを変更しなければならない場合は、複数の場所で変更する必要はありません。 –

+0

FILENAME_MAXはシステム定義の定数です – Milliways

+0

誰かがszBuffのサイズをFILENAME_MAX以外に変更するとどうなりますか? SDKの更新でFILENAME_MAXの値が変更されたらどうなりますか? –