我试图搜索这个问题,但是在这里我找不到任何东西:
我正在尝试使用C代码和WinAPI中的RegSetValueEx函数以及官方文档中定义的数据类型创建一个Registry值.我使用了这些定义:
PTCHAR regValueName = TEXT("dwValue");
DWORD regValueType = REG_DWORD;
BYTE regData = 1;
const BYTE *pRegData = ®Data;
DWORD dataSize = sizeof(regData);
Run Code Online (Sandbox Code Playgroud)
这个HKEY值是由RegCreateKeyEx我没有在这里显示的.
这是我使用该功能的方式:
setValueKey = RegSetValueEx(*pHandleResult, regValueName, reserved,
regValueType, pRegData, dataSize);
Run Code Online (Sandbox Code Playgroud)
setValueEx是一种LONG类型.
您可以注意到,我正在尝试创建一个DWORD值,因此我将BYTEregData值定义为1,然后将const BYTE指针定义为该值,但它不起作用.该值已创建,但数据显示:
DWORD 32位值无效.
我知道BYTE数据类型被定义为unsiged char,但我尝试过'1'但没有用.我也知道使用一个DWORD值作为regData类型有效,但我想知道为什么官方数据类型不适用于DWORD值.
谁能告诉我如何使用BYTE数据类型创建值?
我没有把所有的代码都放进去,但如果需要的话,我会的.
谢谢.
你想存储一个DWORD但是给它一个BYTE.首先,这意味着DWORD的一部分将是未定义的.其次,更严重的datasize是1,但这对DWORD值无效.它需要是4而不是.
要存储的类型,指向该值的指针以及该值的大小都必须正确.
LPCTSTR regValueName = TEXT("dwValue");
DWORD regValueType = REG_DWORD;
DWORD regData = 1;
const BYTE *pRegData = (BYTE *) ®Data;
DWORD dataSize = sizeof(regData);
setValueKey = RegSetValueEx(*pHandleResult, regValueName, reserved,
regValueType, pRegData, dataSize);
Run Code Online (Sandbox Code Playgroud)
或者干脆:
DWORD regData = 1;
setValueKey = RegSetValueEx(*pHandleResult, TEXT("dwValue"), reserved,
REG_DWORD, (BYTE *) ®Data, sizeof(regData));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |