Articles of c + +

在用NT DDK构build的用户模式程序中包含C ++头文件

所以…我有一个内核模式组件和一个用户模式组件,使用NT DDK 7.1.0的交钥匙构build环境。 内核组件都是.c / .h / .rc文件。 用户模式组件是.cpp / .c / .h / .rc文件。 起初,使用构build似乎是最简单的,因为我看到你可以修改用户模式组件的./sources文件来说: TARGETNAME = MyUserModeComponent TARGETTYPE = PROGRAM UMTYPE = windows UMENTRY = winmain USE_MSVCRT = 1 这似乎并没有引起问题,所以我很高兴,直到我试图#include <string> (或<memory> ,或其他)没有find的东西: 错误C1083:无法打开包含文件:“string”:没有这样的文件或目录 不过,它正在用C ++语言语义编译用户模式片断。 但是,我如何获得标准包括工作? 我在技术上不需要为用户模式部分使用DDK 构build工具。 我可以做一个视觉工作室解决scheme。 我有点担心,因为我碰到了其他的烦恼,如DDK默认使用__stdcall而不是__cdecl这个事实…没有任何编译指示或编译器开关来覆盖这个。 你真的必须进入你关心的每一个声明,并改变它,假设你有源代码这样做。 : – / 我开始怀疑这是不是只是一个分形下降到“只是因为你可以并不意味着你应该build立与DDK用户模式的应用程序,这里是龙。 所以我的问题不仅仅是关于这个特殊的技术障碍,而是如果我放弃使用DDK工具构buildC ++用户模式组件的想法…仅仅因为内核组件是纯C的。

RegCreateKeyEx()和GetLastError()

为什么RegCreateKeyEx()返回一个LONG ,而不是通过SetLastError()设置DWORD错误代码? 将它的LONG返回值转换为DWORD ,然后将它设置为SetLastError()的全局错误代码是否安全? http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844(v=vs.85).aspx

无法在Visual Studio 2015中打开源文件

我正在尝试使用Visual Studio Community 2015在windows中编译OBS studio 。我在Visual Studio中创build了一个项目,并通过将这些文件拖到解决scheme资源pipe理器中将整个git repo复制到项目中。 这个项目依赖于libav,x264和curl。 它们以.lib,.dll和头文件forms提供。 问题是我不断收到“无法打开源文件”。 我有一个单独的文件夹中的dll和lib的头文件(dll和lib在同一个文件夹中)。 在项目设置 – > VC ++目录下,我添加了include目录,并且还添加了库目录。 然后我在链接器 – >input – >附加依赖关系下特别添加了这个库。 然后我将包含.dll文件的目录添加到环境variablesPATH。 毕竟,我仍然得到同样的错误,以及一些其他的错误。 这是一个有问题的源文件的屏幕截图。 这些是我的设置。 对于这条路,我曾尝试过和没有尾随的正斜杠。

一般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我有问题,“脏”的驱动器重新安装时不可写入。