草庐IT

c++ - COM 初始化和清理是否适合函数级粒度?

考虑编写一个可重用的自定义函数,在其函数体内创建COM对象并调用某些COM接口(interface)的方法。为了使其正常工作,必须调用CoInitializeEx和匹配的CoUninitializeAPI。在函数体内部调用那些COM初始化和清理API会向调用者隐藏COM实现细节,同时也会减轻调用者的负担。但是在函数体内调用CoInitializeEx和匹配的CoUninitialize是否被认为是一种好的编码习惯?在函数粒度级别调用那些COM初始化/清理函数是否意味着每个函数调用的开销太大?这种设计还有其他缺点吗? 最佳答案 这是一

c++ - 转换为 Unicode 时提升属性树问题

好的,首先我不是天生的C++开发人员;我已经设法将一些东西放在一起并且工作正常,但我确信从专家的角度来看它看起来像垃圾=)所以我制作了一个免费软件应用程序,它使用来自Boost库的PropertyTree。我使用“使用多字节字符集”设置开发了整个应用程序(在VS2010中)。我决定是时候检查并更新应用程序以支持Unicode,因为我希望更好地支持一些具有复杂字符集的人。我经历了将所有引用和调用更改为使用宽字符串的繁琐过程,以及所有必要的转换。但是,有一点我完全被难住了,我只剩下两个编译器错误。它们都来自stream_translator.hpp(/boost/property_tree

c++ - CreateFileMapping/MapViewOfFile 返回的共享内存数组是否初始化为零?

只是想知道我是否正在像这样在Windows平台上创建共享内存阵列:HANDLEhFile=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE|SEC_COMMIT,0,1024*4,_T("mySharedMemName"));if(hFile){VOID*pData=MapViewOfFile(hFile,FILE_MAP_ALL_ACCESS,0,0,1024*4);//Is'pData'arrayinitializedwithzerosthefirsttimethe'hFile'isused?}我第一次调用这段代码

c++ - 在 Windows 7 中读取注册表行为异常

我正在尝试使用C++读取Windows7中注册表的“(默认)”值,以下是我正在使用的代码:stringGetSZValueUnique(HKEYopenKey,constchar*regkey,constchar*keyName){HKEYhKey=0;BYTEdata[512];DWORDszsize=512;stringvalue;LONGretValue=RegOpenKeyEx(openKey,regkey,0,KEY_READ,&hKey);if(retValue==ERROR_SUCCESS){LONGretV=RegQueryValueEx(hKey,keyName,0,

c++ - 是否需要删除渲染上下文并销毁设备上下文?

使用OpenGL的win32api是否需要删除HDC和HRC?我认为Win32API会在窗口关闭时销毁它们?澄清:HRC是一个HGLRC对象。 最佳答案 “必须”吗?如果您的进程在关闭窗口后自行终止,则不会。Windows将清除这些类型的未完成句柄。您应该这样做吗?绝对地。您应该始终清理您在应用程序中使用的对象。把东西扔在地上让操作系统清理不是一个好习惯。如果没有其他原因,您可能想在关闭旧窗口后创建一个新窗口。在这种情况下,这个垃圾HGLRC会占用宝贵的资源。 关于c++-是否需要删除渲

c++ - -读取字符串字符时出错

我有以下代码块:for(CarsPool::CarRecord&record:recs->GetRecords()){LVITEMitem;item.mask=LVIF_TEXT;item.cchTextMax=6;item.iSubItem=0;item.pszText=(LPSTR)(record.getCarName().c_str());//breakpointonthisline.item.iItem=0;ListView_InsertItem(CarsListView,&item);item.iSubItem=1;item.pszText=TEXT("Available")

c++ - 当计算机不在域中时,LogonUser() 不对无效域的用户进行身份验证

我在使用C++中的LogonUser()API函数时遇到一些问题。我正在测试的计算机不在域中。我正在测试的帐户存在于计算机上,但当我提供无效域时,它会验证登录。这对我来说似乎不对。HANDLEtoken;if(!LogonUser("LocalUser","InvalidDomain","Password",LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&token)){unsignedlongerror=GetLastError();}这是正确的行为吗? 最佳答案 我认为工作

c++ - 是否可以更改只读编辑控件的背景颜色

我一直试图找到一个简单的解决方案来更改具有ES_READONLY标志的编辑控件的颜色。当编辑控件可编辑时,我的代码(某种程度上)有效,但对我的具有只读标志的编辑控件没有影响。caseWM_CTLCOLOREDIT:{HDChdc=(HDC)wParam;//if(GetDlgItem(hwnd,IDC_EDIT_IN)==(HWND)lParam)//{SetTextColor(hdc,RGB(255,255,255));//SettextcolortowhiteSetBkColor(hdc,RGB(255,255,255));//Setbackgroundcolortoblack//

c++ - 新建桌面收不到键盘事件

我创建了一个小程序,可以在新桌面上自行启动。HDESKhDesktop=::CreateDesktop(strDesktopName.c_str(),NULL,//ReservedNULL,//Reserved0,//DF_ALLOWOTHERACCOUNTHOOKGENERIC_ALL,NULL);//lpSecurity::SetThreadDesktop(hDesktop);稍后,使用以下行在该桌面上启动另一个应用程序:PROCESS_INFORMATIONpi={0};STARTUPINFOsi={0};si.cb=sizeof(si);si.lpDesktop=&strDes

c++ - Win32 位图渲染速度如何比像素快?

与SetPixelV或其他函数(例如.如果最后计算机将为位图绘制像素,这是如何工作的? 最佳答案 假设您有一个像素。该像素具有颜色分量AB和C。您正在绘制的表面具有颜色分量XY和Z。所以首先你需要检查它们是否匹配。如果它们不匹配,成本就会上升。假设它们匹配。接下来,您需要进行边界检查——调用者是否给了您一些愚蠢的东西?一些比较、加法和乘法。接下来,您需要找到像素所在的位置。这是一些乘法和加法。现在,您必须访问源数据和目标数据并写入它们。如果您一次处理一条扫描线,几乎所有上述开销都可以一次完成。您可以计算扫描线的哪一部分落入边界或不落