Win32 странное поведение Widechar - PullRequest
0 голосов
/ 04 декабря 2011

Я раньше не использовал широкие символы.Вот код от кого-то еще:

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.Когда я отлаживаю его в моей 64-битной системе Windows 7 Prof., я получаю то, что мне кажется недопустимым символом для wroot, например

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

1008 *

Ответы [ 2 ]

0 голосов
/ 04 декабря 2011

Проблема в 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 будет содержать каталог, а ShortName указывает на имя.

Приведенный выше код использует TCHAR и #define UNICODE, но вы можете изменить имена функций на имена wchar.

0 голосов
/ 04 декабря 2011

Измените ваш sizeof на _countof, и это решит вашу странную проблему с данными.

Вам не нужны оба набора функций.Используйте тот набор, который подходит для данного приложения.Если вам нужно, чтобы SEVEN_ZIP_EXE был wstring, вы можете исключить тип char.

...