小编bsr*_*uth的帖子

如果我没有在打开的密钥上调用RegCloseKey会发生什么?

在Windows中,如果在HKEY超出范围之前没有调用RegCloseKey,那么打开的HKEY变量会发生什么?应用程序关闭时,我没有看到任何错误或警告,也没有任何内存泄漏. MSDN没有提供太多帮助,但听起来好像它以某种方式耗尽了资源.有谁知道实际发生了什么?

windows registry

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

为什么没有为CMFCMenuButton绘制下拉箭头?

尝试将CMFCMenuButton添加到现有MFC应用程序时遇到了此问题。它工作正常,甚至调整了按钮的大小以适应下拉箭头。但是它没有绘制下拉箭头,当我将鼠标悬停在按钮上时,我看到了以下调试输出:

> Can't load bitmap: 42b8.GetLastError() = 716
> CMenuImages. Can't load menu images 3f01
Run Code Online (Sandbox Code Playgroud)

事实证明,即使使用Visual Studio 2010 RTM,在创建基于MFC对话框的全新应用程序时,CMFCMenuButton也不绘制箭头,并显示相同的错误。最初,我以为我没有正确安装或注册任何东西。但是,MFC Feature Pack中的NewControls示例完美显示了下拉箭头。

缺什么?

c++ mfc widget cmfcmenubutton

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

C++中不同字符串类型的优缺点

很抱歉在SO上开始另一个无法回答的问题,但我只是好奇C++中所有不同字符串类型的优缺点.我的特殊问题是在MFC的CStrings和std :: string之间(因为我只使用Windows软件),但这会延伸到C++中的任何字符串格式.你在C++中使用的最佳字符串类型是什么?为什么?

更新:我实际上发现了一个重复的问题.感谢那些已经回答的人.请指出对这个问题的任何新回复: 如何处理C++中的字符串?

c++ string cstring

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

什么可以导致WPF应用程序崩溃与AppHangB1问题事件名称?

我目前正在处理的程序偶尔会挂起AppHangB1问题事件.我已将其追溯到一系列特定的动作,但它似乎是一种heisenbug,因为每当我单步执行代码时,它都不会表现出来.一旦程序挂起,我就无法暂停程序以查看它在Visual Studio中的挂起位置.这个应用程序中有很多事情发生(非托管互操作,多线程等),因此在我的特定应用程序中可能出现任何数量的错误.

我不是在寻找任何人为我解决我的问题,我只是想知道什么类型的东西可能导致这种类型的挂起?我在Google上发现了一些点击,但没有任何帮助..NET应用程序的任何调试技巧都可以帮助查明问题.

.net crash debugging wpf

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

为什么CMFCMenuBar没有使用加速器表?

在使用VS2008的doc/view项目中,MFCMenuBar似乎从项目中加载了正确的MENU资源(IDR_MAINFRAME),因为添加和删除菜单项会反映在菜单的UI中.它甚至会将加速器附加到默认菜单项(例如Ctrl + O到Open ...项目).但是,加速器表(IDR_MAINFRAME)似乎没有连接到菜单.将Open ...的默认Ctrl + O更改为Ctrl + 7之类的功能不起作用.Ctrl + O仍然附加到Open ...菜单项,Ctrl + O仍然调用Open ...处理程序.资源文件中只有一个加速器表,所以我不知道CMFCMenuBar在哪里获取其加速器信息.

此时,我已经能够通过手动加载IDR_MAINFRAME加速器表并自己翻译消息来使加速器工作.但CMFCMenuBar仍然附加默认加速器.

谁能解释一下这里发生了什么?如何强制MFCMenuBar使用我的加速器表并且不附加加速器或附加正确的加速器?

c++ mfc accelerator mfc-feature-pack

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

如何使用s ///运算符将字符插入字符串?

我正在尝试将注释字符插入到与此类似的字符串中:

-CreateVideoTracker VT1 "vt name"
Run Code Online (Sandbox Code Playgroud)

-CreateVideoTracker VT1 # "vt name"
Run Code Online (Sandbox Code Playgroud)

VT1字实际上可以是任何东西,所以我正在使用正则表达式

$line =~ s/\-CreateVideoTracker \w/\-CreateVideoTracker \w # /g;
Run Code Online (Sandbox Code Playgroud)

这给了我结果:

-CreateVideoTracker w #T1 "vt name"
Run Code Online (Sandbox Code Playgroud)

有没有办法用单个正则表达式做到这一点,还是我需要拆分字符串并手动插入注释?

regex string perl

2
推荐指数
1
解决办法
6182
查看次数

是否可以覆盖数组访问运算符以获取C++中对象的指针?

我正在尝试对代码进行一些重构,并遇到了问题.该程序有一个数据管理器,它返回指向结构数组的指针作为void*.其中一种新类型的数据,而不是指向结构数组的单个指针,有两个指向数组的指针.问题是所有处理代码都是通过访问所有记录类型共有的array [index] .qwTimestamp和array [index] .snSample来完成的.

我认为像下面这样覆盖数组访问运算符([])可能会解决问题:

class ADRec {

public:
    ADRec(unsigned __int64* ts, __int32* data, unsigned index = 0): mTimestamps(ts), mDataPoints(data), mIndex(index) {

        qwTimeStamp = mTimestamps[mIndex];
        snSample = mDataPoints[mIndex];

    }
    ADRec operator[](unsigned i) {
        return ADRec(mTimestamps, mDataPoints, i);

    }
    unsigned __int64 qwTimeStamp;
    __int32 snSample;

private:
    unsigned __int64* mTimestamps;
    __int32* mDataPoints;
    unsigned mIndex;
};
Run Code Online (Sandbox Code Playgroud)

如果您使用对象,此方法可以正常工作:

unsigned __int64 ts[] = { 2, 3, 4, 5};
__int32 data[] = {4, 6, 8, 10};

ADRec tmp =  ADRec(ts, data, 0);

ASSERT(tmp[0].qwTimeStamp == 2);
ASSERT(tmp[0].snSample …
Run Code Online (Sandbox Code Playgroud)

c++ pointers operator-overloading operators

0
推荐指数
1
解决办法
1150
查看次数