小编Mar*_*n B的帖子

CreateFile可以返回NULL吗?

我知道CreateFile返回的无效值是INVALID_HANDLE_VALUE.但是因为我也喜欢使用RAII,所以很容易将HANDLE放在shared_ptr(如下:)中 shared_ptr<void> handle (CreateFile(args),&CloseHandle)以确保句柄关闭.我唯一担心这种快速简便的RAII方法是CreateFile可以返回NULL作为HANDLE值.

c++ windows winapi

6
推荐指数
1
解决办法
1920
查看次数

如何找到激活时打开给定HMENU的菜单项(如果有)?

我想用原型实现一个功能

/* Locates the menu item of the application which caused the given menu 'mnu' to
 * show up.
 * @return true if the given menu 'mnu' was opened by another menu item, false
 * if not.
 */
bool getParentMenuItem( HMENU mnu, HMENU *parentMenu, int *parentMenuIdx );
Run Code Online (Sandbox Code Playgroud)

给定一个HMENU句柄,我希望能够找出应用程序中打开了哪个菜单项(如果有)。这基本上是与GetSubMenu函数相反的。

我当前的方法是查看应用程序顶级窗口中的每个HMENU,并检查是否可以找到一个菜单项,该菜单项在激活时会打开给定的子菜单。我使用GetMenuItemCount / GetSubMenu递归执行此操作

但是,这效率很低,并且对于由上下文菜单项打开的菜单而言,它会失败。因此,我想知道:

有谁知道如何找到激活菜单后打开给定HMENU的菜单项(如果有)?

更新:我刚刚想到一个主意;应该有可能(使用SetWindowsHookEx函数)安装一个钩子,该钩子会通知菜单中发生的所有输入事件。每当检测到菜单项激活时,请记住该菜单项(由(HMENU,int)对标识)和将通过全局菜单中的菜单项打开的HMENU。然后,getParentMenuItem上面的函数可以简单地对地图进行查找。

更新的更新:上面的更新中描述的挂钩想法照旧是行不通的,因为它当然只会识别菜单项->菜单关联,这些菜单项已在某个时候被激活。

但是,这感觉有点难看,因为它要求我保持很多状态(地图);有没有更简单的可能性?

c c++ winapi mfc menu

5
推荐指数
1
解决办法
3691
查看次数

遍历继承层次结构的静态强制转换与动态强制转换

我看过一本关于C++的书,提到使用静态转换导航继承层次结构比使用动态转换更有效.

例:

#include <iostream>
#include <typeinfo>

using namespace std;

class Shape { public: virtual ~Shape() {}; };
class Circle : public Shape {};
class Square : public Shape {};
class Other {};

int main() {
    Circle c;

    Shape* s = &c; // Upcast: normal and OK

    // More explicit but unnecessary:
    s = static_cast<Shape*>(&c);
    // (Since upcasting is such a safe and common
    // operation, the cast becomes cluttering)

    Circle* cp = 0;
    Square* sp = 0;

    // Static Navigation …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-cast casting rtti static-cast

5
推荐指数
3
解决办法
6789
查看次数

在C#中使用表单上的控件时何时使用THIS关键字

我仍然远离掌握C#,但我的孩子正在推动我每天继续改进我的编程.
当我创建一个WinForms应用程序时,我想要实际更改并使用大量控件.
我不明白的是当我需要使用this.control关键字时,我应该只使用control.
示例:
如果我想更改标签的文字,我可以写

mylabel.text = "Text for label"
Run Code Online (Sandbox Code Playgroud)

要么

this.mylabel.tex = "Text for label"
Run Code Online (Sandbox Code Playgroud)

以下哪一种是正确的方法?this在WinForms中使用控件时(例如数据网格,文本,表格等),何时使用关键字有一个简单的解释?

.net c# this-pointer winforms

5
推荐指数
2
解决办法
1344
查看次数

有关英特尔IA-32软件开发人员手册的问题

我正在研究英特尔的IA-32软件开发人员手册.特别是,我正在阅读以下手册:http://www.intel.com/Assets/PDF/manual/253666.pdf.我们以ADD指令为例.在第79页上写入,您可以将r8(8位寄存器)添加到r/m8(8位寄存器或存储单元).在下面的几行中,还写入了可以将r/m8添加到r8.问题是:如果我添加两个8位寄存器,我正在使用哪条指令?谢谢.

x86 assembly intel

4
推荐指数
1
解决办法
281
查看次数

(a + b)>> 1是什么意思?

int c = (a+b) >>1C++ 中的意思是什么?

c++ operators

4
推荐指数
3
解决办法
3420
查看次数

C++中的比较

在比较两个方面,这是C++中的有效代码吗? const char *

const char * t1="test1";
const char * t2="test2";

t2 = "test1";
if ( t1 == t2 ) {

cout << "t1=t2=" << t1 << endl;

}   
Run Code Online (Sandbox Code Playgroud)

没用strcmp

c++ comparison const char

4
推荐指数
1
解决办法
522
查看次数

如何通过反汇编从C++函数中获取"lea"指令?

我正在努力学习逆向工程,而且我仍然坚持这个小东西.我有这样的代码:

.text:10003478                 mov     eax, HWHandle
.text:1000347D                 lea     ecx, [eax+1829B8h] <------
.text:10003483                 mov     dword_1000FA64, ecx
.text:10003489                 lea     esi, [eax+166A98h]<------
.text:1000348F                 lea     edx, [eax+11FE320h]
.text:10003495                 mov     dword_1000FCA0, esi
Run Code Online (Sandbox Code Playgroud)

我想知道,它在C或C++中看起来如何?特别是箭头标出的两个指令.HWHandle是变量,它保存从GetModuleHandle()函数返回的值.更有趣的是,这条指令下面的几行dword_1000FCA0用作函数:

.text:1000353C                 mov     eax, dword_1000FCA0
.text:10003541                 mov     ecx, [eax+0A0h]
.text:10003547                 push    offset asc_1000C9E4 ; "\r\n========================\r\n"
.text:1000354C                 call    ecx
Run Code Online (Sandbox Code Playgroud)

这将在我的游戏控制台中绘制此文本.伙计们,你有什么想法吗?

c c++ x86 assembly

4
推荐指数
1
解决办法
1087
查看次数

malloc/new是否从Cache或RAM返回内存块?

我想知道malloc/new是否从Cache或RAM返回内存块.

提前致谢.

c c++ memory memory-management

3
推荐指数
2
解决办法
3087
查看次数

内存受限系统中的数组

考虑一下我的系统有内存,但它分散在不同的地方(碎片).没有四个连续的内存位置是免费的.在那种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么?

c memory arrays programming-languages memory-management

3
推荐指数
1
解决办法
249
查看次数