您好,我正在尝试创建一个采用程序路径并放入注册表文件中的程序,但我一直遇到错误。这是代码:
#include <iostream>
#include <windows.h>
#include <winuser.h>
#include <tchar.h>
#include <limits>
using namespace std;
void reg() {
char buffer[MAX_PATH];
GetModuleFileName(NULL,buffer,sizeof(buffer));
const unsigned char Path[ MAX_PATH ] = {buffer};
::HKEY Handle_Key = 0;
::RegSetValueEx( Handle_Key, "My Directory", 0, 1, Path, sizeof Path );
};
我得到的错误是
invalid conversion from 'char*' to 'unsigned char' [-fpermissive]
我花了几个小时寻找解决方案,但找不到。
最佳答案
问题,我猜是这条线
const unsigned char Path[ MAX_PATH ] = {buffer};
这里的问题是您尝试使用字符指针创建单个字符数组。
您仅将该变量用作 RegSetValueEx
调用的临时变量,因此您实际上并不需要它。而是直接使用 buffer
调用该函数。
此外,您不应在此处使用 sizeof
,因为这会将缓冲区的 所有 放入注册表中,而不仅仅是实际的字符串。使用 strlen
。
喜欢:
::RegSetValueEx( Handle_Key, "My Directory", 0, 1,
reinterpret_cast<unsigned char*>(buffer),
strlen(buffer));
关于从 char * 到 unsigned char 的 C++ 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784907/