Articles of c + +

如何避免与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吗?

相当于“SIGINT”(posix)信号,用于捕获Windows / MinGW下的“CTRL + C”

我正在windows下移植一个Linux / gcc程序,并为这两个程序实现了通用的exception处理。 我想知道MinGW / gcc的SIGINT信号相当于什么。 下面是我在Linux下如何处理它: static void handler(int sig) { // Catch exceptions switch(sig) { case SIGABRT: fputs("Caught SIGABRT: usually caused by an abort() or assert()\n", stderr); break; case SIGFPE: fputs("Caught SIGFPE: arithmetic exception, such as divide by zero\n", stderr); break; case SIGILL: fputs("Caught SIGILL: illegal instruction\n", stderr); break; case SIGINT: fputs("Caught SIGINT: […]

在C ++中查看system()调用的输出

我如何查看系统命令的输出。 例如: int _tmain(int argc, _TCHAR* argv[]) { system("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin"); system("cd C:/thisfolder/"); std::cin.get(); return 0; } 当我在Visual Studio中运行该程序时,会给我一个黑屏,我看不到正在运行的命令。 我需要它,所以我可以查看它是否有效。 谢谢!

调整窗口大小会导致黑条

我有一个窗体,它在构造函数中设置这些样式: this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 我在Paint事件中绘制了一些矩形。 表单上没有控件。 Hovewer,当我调整表格的大小时,表格的右下方有黑条。 有什么办法摆脱他们? 我已经尝试了一切,在WndProc监听WM_ERASEBKGND ,手动绘制WM_PAINT上的窗体,实现自定义双缓冲区等。还有什么我可以尝试? 我发现这个: https : //connect.microsoft.com/VisualStudio/feedback/details/522441/custom-resizing-of-system-windows-window-flickers ,它看起来像是DWM中的错误,但我只是希望我能做一些解决方法。 请注意,我必须使用双缓冲,因为我想在Paint事件中绘制相当强烈的graphics表示。 我在C#.NET 2.0,Win7中开发。 状态更新1 我设法通过自己实现resizefunction来摆脱大部分黑色条纹。 Hovewer还有一些小毛病。 有没有办法一次resize和paint操作? 这里是我需要做的一个伪代码 : IntPtr hDC; var size = new Size(250, 200); IntPtr handle = API.PaintAndResizeBegin(this.Handle /* Form.Handle */, size.Width, size.Height, out hDC); using (var g = Graphics.FromHdc(hDC)) { this.backBuffer.Render(g, […]

C ++ Windows十进制到UTF-8字符转换

我一直在使用下面的函数将Unicode字符的十进制表示转换为C ++中的UTF8字符本身。 我目前的function在Linux / Unix系统上运行良好,但在Windows上不断返回错误的字符。 void GetUnicodeChar(unsigned int code, char chars[5]) { if (code <= 0x7F) { chars[0] = (code & 0x7F); chars[1] = '\0'; } else if (code <= 0x7FF) { // one continuation byte chars[1] = 0x80 | (code & 0x3F); code = (code >> 6); chars[0] = 0xC0 | (code & 0x1F); […]

在C#中确定正版Windows安装

如果我想确定一个用户是否拥有一个真正的Windows副本,那么我怎样才能在C#中做到这一点? 我可以与Windows Genuine Advantage集成吗?

在对话框中禁用航空淡入效果

我有一个使用MFC创build的模式对话框。 当它出现时,Aero主题会出现一个新的窗口,它会淡入淡出。 在我的特殊情况下,我立即从一个对话框切换到另一个对话框,淡入淡出效果让人分心。 有没有办法可以禁用,所以窗口立即出现,就像Aero被禁用时一样,但是完全不closuresAero?