Articles of c + +

为什么SetUnhandledExceptionFilter不能捕获一些exception,但AddVectoredExceptionHandler可以做到

我遇到了一个问题,即传递给SetUnhandledExceptionFilter的函数在exception代码c0000374提升时没有被调用。 但它可以正常工作,例外代码为c0000005。 然后,我尝试使用AddVectoredExceptionHandler ,而没有问题,处理函数被调用正确。 这是API错误? 我可以在任何地方使用AddVectoredExceptionHandler而不是SetUnhandledExceptionFilter吗? 这两个函数正常工作 // Exception code c0000005 int* p1 = NULL; *p1 = 99; 只有AddVectoredExceptionHandler可以捕获这个exception。 (为了certificate它不依赖于运行时库,我手动引发exception,结果相同。) // Exception code c0000374 RaiseException(0xc0000374, 0, 0, NULL); testing程序。 #include <tchar.h> #include <fstream> #include <Windows.h> LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) { std::ofstream f; f.open("VectoredExceptionHandler.txt", std::ios::out | std::ios::trunc); f << std::hex << pExceptionInfo->ExceptionRecord->ExceptionCode << std::endl; f.close(); return […]

Windows的gcc端口thread_posixs和thread_win32之间的区别是什么?

我想下载适用于windows的最新版本的gcc 4.7.2编译器。 当我到了这个页面 ,我应该看到一个下载链接,我面对两个类别: 线程,POSIX 线程-win32的 这两个有什么区别? 它们只是线程实现吗?我的意思是它们只是在实现方式上有所不同,因此最终结果(类,如何使用它们等)保持不变。 还是他们强加一个特定的编码风格?

注册为超越应用程序级别的allowDefinition ='MachineToApplication'部分

当我创build一个新文件夹时,出现此错误,并将file upload到该文件夹​​。 我有一个已经build好的现有网站,但是我不想把它添加到网站上,而是让它成为一个独立的应用程序。 有任何想法吗?

在.NET中获取目录数据的最快方法

我正在使用文件同步服务来同步不同机器上的两个文件夹之间的文件。 我需要find一个非常快速的方式来枚举一个目录,并从中获取以下信息: 该目录中所有文件path和子目录path的数据结构或结构,包括每个文件或子目录的最后写入时间。 对于当前目录下任何级别的每个子目录,与上述相同。 到目前为止,我已经想出了这个: static void Main(string[] args) { List<Tuple<string, DateTime>> files = new List<Tuple<string, DateTime>>(); List<Tuple<string, DateTime>> directories = new List<Tuple<string, DateTime>>(); Stopwatch watch = new Stopwatch(); while (true) { watch.Start(); while (!CheckFolderRecursiveSingleThreaded("C:\\", out files, out directories)) { // You can assume for all intents and purposes that drive C does exist and […]

无法运行在Windows XP中由VS2013创build的安装程序文件

在VS-2013,Dotnet4框架和32位体系结构中创build了一个用c#开发的安装文件。 它正在安装在Windows 7和Windows 8,但不是在Windows XP(SP3)与pipe理员previllege。 错误:“在安装应用程序之前安装程序中断,您需要重新启动安装程序才能再次尝试。 帮助需要在这方面。 Output of msiexec /i Setup.msi /l*v MyLogFile.txt === Verbose logging started: 2/12/2015 20:19:11 Build type: SHIP UNICODE 3.01.4001.5512 Calling process: C:\WINDOWS\system32\msiexec.exe === MSI (c) (D4:B4) [20:19:11:125]: Resetting cached policy values MSI (c) (D4:B4) [20:19:11:125]: Machine policy value 'Debug' is 0 MSI (c) (D4:B4) [20:19:11:125]: ******* RunEngine: ******* Product: […]

问题与杀死Windows资源pipe理器?

我需要杀死Windows资源pipe理器的进程(explorer.exe),为此 可以说我使用本地NT方法TerminateProcess 它的工作,但问题是,资源pipe理器重新启动,可能是Windows正在做那个,反正。 当我杀死explorer.exe与Windows任务pipe理器,它不会回来,其停留死亡。 我想通过我的应用程序做任何事情pipe理者。 编辑: 感谢@sblom我解决了它,在registry中快速调整了伎俩。 虽然这是一个聪明的黑客攻击,显然,任务pipe理员有一个更干净的方式,那就是说,我决定现在就用@ sblom的方式。

如何避免与Windows头文件中定义的macros名称冲突?

我有一些C ++代码,包括一个名为CreateDirectory().的方法CreateDirectory(). 以前的代码只使用STL和Boost,但是我最近不得不包含<windows.h>所以我可以查找CSIDL_LOCAL_APPDATA 。 现在,这个代码: filesystem.CreateDirectory(p->Pathname()); // Actually create it… 不再编译: error C2039: 'CreateDirectoryA' : is not a member of … 在winbase.h对应这个macros: #ifdef UNICODE #define CreateDirectory CreateDirectoryW #else #define CreateDirectory CreateDirectoryA #endif // !UNICODE 预处理器正在重新定义我的方法调用。 有没有可能的方法来避免这种命名冲突? 或者我必须重命名我的CreateDirectory()方法?

获取进程的基地址

我想访问一个进程的某个地址。 但为此,我需要首先获取进程的基地址。 我正在使用一个工具,看看我是否真的做对了。 该工具显示我需要以下内容: "app.exe"+0x011F9B08 = 0x119F8300 我以为我可以通过OpenProcess()获得进程的基地址,但是这给了我: 0x0000005c作为结果。 我不认为这是对的? 至less,不是我所需要的。 我认为我需要的基地址是: 0x119F8300 – 0x011F9B08 = 0x107FE7F8 <– base? 这是我的代码: hWindow = FindWindow(NULL, lpWindowName); if(hWindow) { GetWindowThreadProcessId(hWindow, &dwProcId); if(dwProcId != 0) { // hProcHandle -> 0x0000005c hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcId); } else { return 0; } } 我怎样才能得到我打开过程的基地址?

StreamWriter用新文本replace行

是否有可能用一个新的文本replace文本文本,而不擦除其他数据,这是我的示例代码,但它不工作,我知道有一个问题,但我不明白,谢谢, private void button1_Click_1(object sender, EventArgs e) { StreamReader sr = new StreamReader("test10101.txt"); List<string> lines = new List<string>(); while (!sr.EndOfStream) lines.Add(sr.ReadLine()); output = Convert.ToInt32(textBox1.Text); newbal = Convert.ToInt32(lines[0]) – output; MessageBox.Show("Please get your cash….\n\nYour new balance is: $" + newbal); sr.Close(); { string linetoreplace = lines[0]; int newlinevalue = newbal; string contents = sr.ReadToEnd(); StreamWriter sw […]

可靠地检测到我的另一个应用程序正在运行

我有两个应用程序,一个WinForms应用程序和一个Windows服务,将在同一台机器上运行。 我希望WinForms应用程序能够可靠地检测服务何时运行。 我完全控制这两个应用程序的devise和实现。 我的第一个想法是使用一个互斥体 ,由服务实例化和WinForms应用程序可检测。 有更好的devise吗?