0

LPBYTEをLPWSTRに変換する方法について多くの情報を見つけましたが、逆のプロセスについての情報はありません。私は自分でそれをやってみて、そのような方法をテストしました:

// my_documents declaration:
WCHAR my_documents[MAX_PATH];
//1st
const int size = WideCharToMultiByte(CP_UTF8, 0, my_documents, -1, NULL, 0, 0, NULL);
char *path = (char *)malloc( size ); 
WideCharToMultiByte(CP_UTF8, 0, my_documents, -1, path, size, 0, NULL);
//2nd
size_t i;
char *pMBBuffer = (char *)malloc( MAX_PATH );
cstombs_s(&i, pMBBuffer, MAX_PATH, my_documents, MAX_PATH-1 );

しかし、私がそれらをレジストリに書き込むとき、それらは読めません。そして、これは私がそれらをレジストリに書き込む方法です:

BOOL SetKeyData(HKEY hRootKey, WCHAR *subKey, DWORD dwType, WCHAR *value, LPBYTE data, DWORD cbData)
{
    HKEY hKey;
    if(RegCreateKeyW(hRootKey, subKey, &hKey) != ERROR_SUCCESS)
        return FALSE;
    LSTATUS status = RegSetValueExW(hKey, value, 0, dwType, data, cbData);
    if(status != ERROR_SUCCESS)
    {
        RegCloseKey(hKey);
        return FALSE;
    }
    RegCloseKey(hKey);
    return TRUE;
}

SetKeyData(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", REG_SZ, L"My program", (LPBYTE)path, size)

変換に問題はありませんが、これをレジストリに書き込もうとすると、奇妙な文字が表示されます

4

1 に答える 1

2

ワイドレジストリ関数に文字列を書き込む場合は、変換せずに通常のWCHAR *を渡して、LPBYTEにキャストするだけです。サイズを正しくすることを忘れないでください。LPBYTEは、バイナリブロブを作成する場合に最適です。他のすべてのタイプは、キャストする必要があります...

于 2012-05-20T16:28:38.203 に答える