我正在尝试在注册表中设置DWORD值.我使用文本值,但现在我想用数字(0)设置另一个值.但它并没有写出来.
这是我的代码:
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\pager", 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, TEXT("Save"), 0, REG_SZ, (const BYTE*)0x00, sizeof(DWORD));
RegCloseKey(hKey);
Run Code Online (Sandbox Code Playgroud)
PS:密钥已经存在,值为1,所以我试图用值0覆盖它(我没有创建一个新的).
我有多字节字符串的问题.我简化了我的问题如下:
std::wstring str = L"mult?byte test string";
std::wofstream f;
f.open("F:\\dump.txt");
f << str;
f.close();
Run Code Online (Sandbox Code Playgroud)
并且转储文件的内容是:"mult"
为什么它会削减str的剩余部分,而我已经使用了wstring和wofstream?
谢谢
我使用wcin来在wchar_t中存储单个字符.然后我尝试使用wcout调用和法语字符'é'打印它:但我无法在我的控制台上看到它.
我的编译器是g ++ 4.5.4,我的操作系统是Ubuntu 12.10 64位.
这是我的尝试(wideChars.cpp):
#include <iostream>
int main(){
using namespace std;
wchar_t aChar;
cout << "Enter your char : ";
wcin >> aChar;
wcout << L"You entered " << aChar << L" .\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我开始编程时:
$ ./wideChars
Enter your char : é
You entered .
Run Code Online (Sandbox Code Playgroud)
那么,这段代码有什么问题?
我有一个获取std :: string的函数.那个函数调用
第五个参数是注册表值的值,并期望一个const BYTE*类型的变量.所以我必须将std :: string转换为const BYTE*,并将结果数组的长度作为第6个参数.
我找到了一种方法,但它感觉很难看,我真的不明白发生了什么.这是该功能的精简版:
void function(const std::string& newValue)
{
HKEY keyHandle;
if(RegOpenKeyEx(HKEY_CLASSES_ROOT, TEXT("some key"),0,KEY_ALL_ACCESS,&keyHandle) == ERROR_SUCCESS)
{
std::wstring wNewValue;
wNewValue.assign(newValue.begin(),newValue.end());
if (RegSetValueEx(keyHandle, TEXT("some value"), NULL, REG_SZ, (const BYTE*)(LPCTSTR)(wNewValue.c_str()), wNewValue.size()*2)==ERROR_SUCCESS)
{
//do something
}
RegCloseKey(keyHandle);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我首先创建一个宽字符串(定义了UNICODE),然后使用双重转换,并且对于长度我必须做*2,否则它只会设置输入字符串的一半.
这种形式的演员是正常/最好的方式吗?
为什么*2,会有什么更好的方法?
我在Linux系统上使用Qt/C++.我需要将一个QLineEdit文本转换为一个文本std::wstring并将其写入std::wofstream.它适用于ascii字符串,但是当我输入任何其他字符(阿拉伯语或乌兹别克语)时,文件中没有任何内容.(文件大小为0字节).
这是我的代码:
wofstream customersFile;
customersFile.open("./customers.txt");
std::wstring ws = lne_address_customer->text().toStdWString();
customersFile << ws << ws.length() << std::endl;
Run Code Online (Sandbox Code Playgroud)
John Smith在行编辑中输入的输出是John Smith10.但对于unicode字符串,什么都没有.
首先我认为这是一个问题QString::toStdWString(),但customersFile << ws.length();写出所有字符串的正确长度.所以我想我在写wstring文件时做错了.[?]
编辑:
我在eclipse中再次写它.并用g ++ 4.5编译它.结果是一样的:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
cout << "" << endl; // prints
wstring ws = L"????"; // this is an Arabic "Hello"
wofstream wf("new.txt");
if (!wf.bad())
wf << ws;
else
cerr << …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序来获取UCS-2 Little Endian中*.rc文件编码的信息.
int _tmain(int argc, _TCHAR* argv[]) {
wstring csvLine(wstring sLine);
wifstream fin("en.rc");
wofstream fout("table.csv");
wofstream fout_rm("temp.txt");
wstring sLine;
fout << "en\n";
while(getline(fin,sLine)) {
if (sLine.find(L"IDS") == -1)
fout_rm << sLine << endl;
else
fout << csvLine(sLine);
}
fout << flush;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在"en.rc"的第一行是#include <windows.h>但sLine如下所示:
[0] 255 L'ÿ'
[1] 254 L'þ'
[2] 35 L'#'
[3] 0
[4] 105 L'i'
[5] 0
[6] 110 L'n'
[7] 0
[8] 99 L'c'
. .
. . …Run Code Online (Sandbox Code Playgroud) 现在写class得很复杂,觉得我用得太多了CRITICAL_SECTION.
据我所知,某些类型的原子操作总是在没有任何硬件或软件中断的情况下执行.
我想检查一下我是否理解正确.
CRITICAL_SECTION因为这样做不会有中断.bool 是原子的.所以有我的陈述,想问一下,如果它们是正确的,如果它们是正确的,那么什么类型的变量也可以设置或没有CRITICAL_SECTION?
PS我在谈论为每种方法获取或设置一个单值,而不是两个,而不是五个,而是一个.
在pthread.h,可以找到以下定义:
/* Detach state. */
enum
{
PTHREAD_CREATE_JOINABLE,
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
PTHREAD_CREATE_DETACHED
#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
};
Run Code Online (Sandbox Code Playgroud)
为什么这个定义混合枚举和定义?怎么解释呢?此外,它#define正在定义相同的东西.
我正在阅读"Thinking in c ++"的第13章.以下内容来自本书.
MyType*fp = new MyType(1,2);
在运行时,调用malloc(sizeof(MyType))的等价物,并使用(1,2)作为参数列表调用MyType的构造函数,并将结果地址作为this指针.到指针指向fp时.
我对这句大胆的句子感到困惑.这是什么意思?