C++ c++;来自std::string的RegCreateKeyEx LPCWSTR

C++ c++;来自std::string的RegCreateKeyEx LPCWSTR,c++,windows,string,lpcwstr,C++,Windows,String,Lpcwstr,我在注册表中写了一些操作,为此我被困了两天。我真的不知道怎么解决这个问题。所以,这是我的代码: HKEY hkey; DWORD dwDisposition; string address = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\"; QString qAddr= ui->networkCard->itemData(ui->networkCard->current

我在注册表中写了一些操作,为此我被困了两天。我真的不知道怎么解决这个问题。所以,这是我的代码:

 HKEY hkey;
 DWORD dwDisposition;
 string address = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
 QString qAddr= ui->networkCard->itemData(ui->networkCard->currentIndex()).toString();
 address += qAddr.toStdString();
 string sAddr = qAddr.toStdString();
cout << address; // here is the value I want to proceed as 2nd arg in RegCreateKeyEx
size_t size = address.size();
wchar_t szBuff[size];
swprintf(szBuff, size, L"%s", address.c_str());
cout << szBuff << endl; // but after conversion I get some hex data like 0x28d172 :(

if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, szBuff, 0, NULL, 0, KEY_WRITE, NULL, &hkey, &dwDisposition) == ERROR_SUCCESS){
  DWORD dwType, dwSize;
  dwType = REG_DWORD;
  ....
HKEY-HKEY;
德沃德;
字符串地址=“系统\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\”;
QString qAddr=ui->networkCard->itemData(ui->networkCard->currentIndex()).toString();
地址+=qAddr.toStdString();
string sAddr=qAddr.toStdString();

coutRegCreateKeyEx仅当项目设置为unicode时才需要LPCWSTR。如果需要unicode项目,请使用std::wstring而不是std::string。如果不需要unicode项目,请将项目字符集设置更改为多字节字符集,这将允许您使用std::string。

L“%s”
格式替换为
L“%s”
。或者使用CA2W宏。谢谢,但对我来说根本不起作用。好的,用RegCreateKeyExA替换RegCreateKeyEx,并将szBuff类型更改为char。如果有些东西“对您不起作用”,请提供一些详细信息。非常感谢,现在它工作得很好:)但现在我遇到了一个新问题,如何从std:string编写REG_MULTI_SZ值?呵呵,从来没有没有问题。我读过,但我不知道在哪里可以改变它。我使用的不是VS而是QT Designer,这里我没有这些选项:/也许最好的方法是在VS中创建DLL,然后在QT Designer的主项目中导入它?我希望不是。。