Articles of c + +

一般C ++ Linux到Windows的移植问题

背景:基于networking的服务( tcp+udp ,不是http )存在即将公开发布的C++ linux客户端API。 这个客户端API使用普通的tcp套接字,udp套接字,C ++命名空间和部分stl std::map和std::vector ,并将作为一组头文件和.a和.lib文件进行链接。 问题:刚开始考虑将这个C ++客户端API移植到Windows将需要什么。 在Windows下使用gcc / g ++有意义吗? 我的第一个倾向是这是行不通的,因为Windows上的开发人员通常使用Microsoft Visual Studio套件,他们将无法链接到由gcc生成的库。 这是一个正确的假设,还是海湾合作委员会提供一些漂亮的开关,产生微软编译器和微软链接器兼容的输出文件?

如何使用C ++在Win上编写和读取UTF16文件

关于这个,关于SO有很多问题,但是大多数都没有提到写回wstring。 所以例如我发现这个阅读: // open as a byte stream std::wifstream fin("/testutf16.txt", std::ios::binary); // apply BOM-sensitive UTF-16 facet fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>)); // read std::wstring ws; for(wchar_t c; fin.get(c); ) { std::cout << std::showbase << std::hex << c << '\n'; ws.push_back(c); } 我尝试写类似的东西: std::wofstream wofs("/utf16dump.txt", std::ios::binary); wofs.imbue(std::locale(wofs.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>)); wofs << ws; 但它会产生垃圾,(或Notpad ++和vim不能解释它)。 […]

夏令时和使用WinAPI进行的UTC到本地时间转换

我试图看看是否从本地转换到UTC时间,反之亦然是准确的夏令时。 例如,让我们拿LocalFileTimeToFileTime API。 其描述中指出: LocalFileTimeToFileTime使用时区和夏令时的当前设置。 因此,如果是夏令时,即使您正在转换的时间处于标准时间,此function也会考虑夏令时。 所以我用这个代码testing它: //Say, if DST change takes place on Mar-8-2015 at 2:00:00 AM //when the clock is set 1 hr forward //Let's check the difference between two times: SYSTEMTIME st1_local = {2015, 3, 0, 8, 1, 30, 0, 0}; //Mar-8-2015 1:30:00 AM SYSTEMTIME st2_local = {2015, 3, 0, 8, 3, […]

为什么GetFileAttributesW(L“C:”)返回FILE_ATTRIBUTE_REPARSE_POINT?

通常, GetFileAttributesW(L"C:")返回0x10 ( FILE_ATTRIBUTE_DIRECTORY ),这是合理的。 在某些情况下, GetFileAttributesW(L"C:")将返回0x2416 ( FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED ) 我想知道是什么让它发生,以及如何摆脱它。 这个问题使boost::filesystem::canonical不能工作。 你有什么主意吗?

sscanf Modifier%Fd扫描的types是什么?

我遇到了一些具有以下types的行的遗留代码: sscanf(szBuff,“%Fd%Ff%Fd%Ff” 有没有人select像Fd或Ff修饰符? 如果是这样,那是什么意思? 我似乎无法find任何信息。 代码编译并运行良好。

LoadLibrary()的相对地址为dll

我想在我的代码在Windows中加载DLL,我用LoadLibrary()函数成功加载我的DLL,但我有一个问题,我给我的DLL的path如: LoadLibrary(C:\\path\\to\\my\\dll); 我不知道是否可以给我的DLL的相对path。 我的意思是例如: LoadLibrary(.\my dll directory\my dll.dll) 可能吗? 如果没有,我怎样才能开发我的项目,它可以是便携式的,而不改变在不同的机器上的DLL的path?

安全地移除已安装的驱动器

我有一个应用程序,通过SATA接口将文件写入格式化为NTFS的外部驱动器。 在closures应用程序之前,我确保使用FlushFileBuffers为每个文件(即CreateFile , FlushFileBuffers , CloseHandle )刷新所有内容。 然后我卸下驱动器,没有先卸载它! 将驱动器插入PC机时似乎工作正常。 但是,将其插入OS X时,操作系统似乎找不到任何文件,除非该驱动器已正确卸载。 有什么可以从磁盘丢失导致OS X找不到任何东西,有没有办法,我可以刷新数据,而无需卸载驱动器? 编辑: 与exfat我有问题,“脏”的驱动器重新安装时不可写入。

ReferenceError:Sys未定义ReferenceError:WebForm_DoPostBackWithOptions未定义

我们在我的专用服务器上build立了一个新的域,我的旧域完美运行。 我的网站是build立在asp.net。 在新的域名上,我有一个旧的代码的副本。 这两个站点都在同一个专用服务器上。 当我尝试执行新网站上的代码时,出现以下错误消息: ReferenceError:系统没有定义 ReferenceEror:WebForm_DoPostBackWithOptions没有定义 你能帮我解决这个问题吗?

Windows 8 C#/ XAML应用程序在一台机器上,而不是另一台机器的大内存使用情况

我正在C#/ XAML中的Windows 8应用程序工作。 我正在使用MVVM模式,SQLite数据库,多语言支持等,我没有太多注意应用程序使用多less内存时运行。 它跑得相当快。 在某个时候,我觉得应用程序的转换速度要慢得多。 我也试图通过提交过程 – 创build上传包(对于X64,X86,ARM),运行authenticationtesting。 该应用程序通过了authenticationtesting。 但是我对速度有点担忧,而且我试图检查它的内存使用情况,发现它使用了几百MB的内存,并且在某些时候内存可能会上升到1GB(根据任务pipe理器中报告的数字)。 所以我尝试了一些debugging,发现在它到达App.xaml.cs代码的第二行之前,它已经使用了大约150 MB。 我试图将这个项目加载到另一台机器上,并在那里运行,内存使用量通常小于100MB,速度是我在减速之前所经历的。 所以这对我来说是正常的。 那么你们有没有类似的经历? 你有什么想法如何使我的原始机器上的应用程序正常工作? 我的印象是,在代码中我没有任何东西可以做。 这可能与我原来的机器上的项目有关。 但是我不知道是什么设置。 我试过重新启动机器,并没有解决问题。 应用程序变慢后,它也坠毁了。 在事件查看器中,我看到消息提到了vrfcore.dll。 我做了一些search,看到它与应用程序validation程序有关,我记得之前尝试运行应用程序validation程序。 我也尝试了工具栏中的debugging位置,并尝试模拟暂停。 但即使我不知道这样做,记忆力也是很高的。 这个问题似乎只影响我的机器上的应用程序,但不是所有的应用程序。

有没有办法使用win32 API调用获取MachineGuid(而不是从registry中进行手动读取)?

有没有什么办法可以使用win32 API调用来获取MachineGuid(不是从registry中手动读取)?