小编zar*_*zar的帖子

如何正常从COM错误中恢复?

我有一个第三方COM组件及其VC++中的c ++接口.我在下面的调用中遇到崩溃,这会导致我的应用程序崩溃.如何从这个不属于我的应用程序的功能中优雅地恢复?

inline _RecordsetPtr IGLibMgr::GetLibInfo ( _bstr_t LibPath ) {
    struct _Recordset * _result = 0;
    HRESULT _hr = raw_GetLibInfo(LibPath, &_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _RecordsetPtr(_result, false);
}
Run Code Online (Sandbox Code Playgroud)

它在最后一行崩溃了.我不认为我可以修改此代码,因为它是第三方COM的东西.我真的有什么选择?我只是想给用户打开消息框并优雅地返回.

c++ com mfc

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

如何忽略MSVC中未初始化的变量错误

我遇到MSVS编译器问题,我有以下代码:

if (!list) {
    *type = raw_data[*i++];
    ptr = (char*) &size;
    ptr[1] = raw_data[*i++];
    ptr[0] = raw_data[*i++];
    name = new char[size+1];
    memcpy (name, raw_data+*i, size);
    name[size] = '\0';
    *i += size;
}
Run Code Online (Sandbox Code Playgroud)

然后:

if (!list) {
    s->name = name;
    s->name_size = size;
}
Run Code Online (Sandbox Code Playgroud)

list的值在这个函数中没有改变,但由于这个错误,我无法编译代码:

错误1错误C4703:使用了未初始化的本地指针变量'name'

我觉得这不是一个警告,而是一个错误令人难以置信的烦恼.将bool更改为const bool也无济于事.有人知道如何在Visual Studio中忽略此特定错误,但仍显示其他错误/警告?

c++ compilation visual-studio

6
推荐指数
2
解决办法
5969
查看次数

如何将 QObject 指针的属性公开给 QML

我对我的班级进行了非常简短(和部分)的描述,以表明我的问题。基本上我设置了两个属性。

class Fruit : public QObject
{
Q_OBJECT
  ....
public:
    Q_PROPERTY( int price READ getPrice NOTIFY priceChanged)

    Q_PROPERTY(Fruit * fruit READ fruit WRITE setFruit NOTIFY fruitChanged)
}
Run Code Online (Sandbox Code Playgroud)

在我的 QML 中,如果我访问该price属性,它会运行良好。但是,如果我访问fruit明显返回的属性Fruit,然后尝试使用它的price属性,那是行不通的。这不应该这样工作吗?

Text {
    id: myText
    anchors.centerIn: parent
    text: basket.price // shows correctly
    //text: basket.fruit.price // doesn't show
}
Run Code Online (Sandbox Code Playgroud)

第二个返回的Fruit也是一个属性,它有price属性,但它似乎无法访问该属性?这应该有效吗?

更新

我包括我的源代码。我用 创建了一个新的演示HardwareComponent,这样更有意义。我试图根据我收到的答案让它工作,但没有运气。

HardwareComponentComputerclass 是和的基类CPU

主程序

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

class HardwareComponent …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2 qproperty

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

强制在Visual Studio 2015调试器中加载不匹配的符号

我正在使用Visual Studio 2015调试用户模式崩溃转储文件.但是符号不匹配.

在WinDbg中有一个命令行.reload /f /i,/i忽略将PDB文件绑定到可执行文件的时间戳.在Visual Studio调试器中是否有类似的东西,所以它忽略了PDB文件的时间戳并加载这些文件?

是否有使用Visaul Studio 2015调试器的命令行和命令,我可以获得更多控制权?此外,我找不到在哪里可以设置源代码路径.可能吗?

下面是给出符号路径的屏幕.没有地方可以输入(任意)标志来强制它加载这些符号.我知道强制不匹配的符号并不合适,但我没有原始的符号.

符号设置的屏幕截图 - 无法输入标记以强制加载

c++ windows debugging windbg visual-studio-2015

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

重新定义/遮蔽局部变量有多糟糕?

在将遗留项目升级到VS2015时,我注意到有很多错误,例如在函数内部重新定义了局部变量.

void fun()
{
    int count = applesCount();

    cout << "Apples cost= " << count * 1.25;

    for (int bag=0; bag<5;bag++)
    {
        int count = orangesCount(bag);

        cout << "Oranges cost = " << count * 0.75; 
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器的错误/警告消息是:

declaration of 'count' hides previous local declaration 
Run Code Online (Sandbox Code Playgroud)

我知道对变量使用相同的名称显然不是一个好习惯,count但编译器是否真的可以搞砸了,或者通常他们会优雅地处理这种情况?

是否值得更改和修复变量名称,或者不太可能造成任何伤害,风险很低或没有风险?

c++

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

为什么CDC :: SelectObject(CFont*)接受CFont对象与指针?

    CPaintDC dc(this); 
    CFont font; 
    dc.SelectObject(font);  // why does this build? 
Run Code Online (Sandbox Code Playgroud)

函数CDC :: SelectObject接受一个类型的指针,CFont但为什么这个构建时提供了一个对象?我遇到了这个问题,上面的代码是不可预测的,有时可能会崩溃,但并非总是如此.

c++ mfc

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

调试器不会进入MFC源代码

我在VS2010中有一个新的SDI项目,但我无法进入MFC源.我按照这里的步骤,似乎资源符号由于某些原因没有加载,但它不会加载右键点击,如在那里最投票的答案中所述.

当我进入调试>> Windows>模块时,该窗口将符号状态列显示为Cannot find or open the PDB file.我猜这是问题,但是当我右键单击任何一个模块(例如mfc100enu.dll)时,我得到另一个带有类似消息的对话框,但找不到符号文件.

什么可能出错,它找不到符号文件以及如何解决这个问题?

模块窗口

我想要介入的功能LoadFrame在我的基本SDI应用程序的下面.

BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) 
{
    // base class does the real work

    if (!CFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
    {
        return FALSE;
    }

...
}
Run Code Online (Sandbox Code Playgroud)

任何提示我怎么不加载它们可能是错的?谢谢

更新

我可以通过转到Tools-> Options-> Debugging-> Symbols并选择复选框"Microsoft Symbol Servers"来启动VS2010以加载符号文件,现在Visual Studio会自动加载PDB.但是我仍然无法进入这个功能.

c++ mfc visual-studio-2010 visual-c++

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

在我的Qt应用程序中收到了WM_DEVICECHANGE但没有收到DBT_DEVICEARRIVAL

我正在按照一个示例来检测Windows 7中的USB闪存驱动器插件和插件检测.我确实收到了通知,WM_DEVICECHANGE但没有收到DBT_DEVICEARRIVALUSB设备的插件.我的代码如下:

/*******************************************
*             WINDOWS EVENTS
********************************************/
/*We use the first WM_PAINT event to get the handle of main window
  and pass it to RegisterDeviceNotification function.
  It not possible to do this in the contructor because the
  main window does not exist yet.
  WM_DEVICECHANGE event notify us that a device is attached or detached */
bool USBexample::nativeEvent(const QByteArray & eventType, void * message, long * result)
{
    MSG * msg = static_cast< MSG * > (message); …
Run Code Online (Sandbox Code Playgroud)

c++ qt

5
推荐指数
0
解决办法
1557
查看次数

为什么'this'指针在单步执行代码时会改变它的值?

我正在调试崩溃,我注意到作为调试器的一步,this指针改变其值,经过3个步骤后,它最终得到值0x00000001并且应用程序崩溃.

现在0x00000001值显然是错误的,但是this当我逐步调试调试器时,我真的期望值会改变吗?

下面是我正在调试崩溃的构造函数.我已经this在每个步骤的注释中包含了指针的值,你可以看到它跳了很多.

CADOCommand::CADOCommand(CADODatabase* pAdoDatabase, CString strCommandText, int nCommandType)
{
    m_pCommand = NULL;
    m_pCommand.CreateInstance(__uuidof(Command)); // this = 0x515f9d10
    m_strCommandText = strCommandText; // this = 0x2c0c0ee8
    m_pCommand->CommandText = m_strCommandText.AllocSysString(); // this = 0x515f9d20
    m_nCommandType = nCommandType; // this = 0x70847a55
    m_pCommand->CommandType = (CommandTypeEnum)m_nCommandType; // this = 0x00000001
    m_pCommand->ActiveConnection = pAdoDatabase->GetActiveConnection(); 
    m_nRecordsAffected = 0;
}
Run Code Online (Sandbox Code Playgroud)

this我们单步执行给定成员函数中的代码时,是否存在可能或应该更改的值?

更新

我必须添加记录并回应几条评论,我正在调试发布版本,但是当我在调试版本中调试相同的函数时,其值this并没有改变.

那么这意味着什么,仅在发布版本中存在问题吗?

@drescherjm的评论是赞成的,in release mode the this pointer is not correct because of optimization …

c++ debugging windbg

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

为什么gflags无法启动,当我启动时它会立即飞溅并立即退出

当我在Windows 7上运行gflags时,它应该提供UI,但事实并非如此.我看到一个简短的黑色命令窗口然后退出并且gflags UI永远不会出现.它可能在命令提示符下工作但我真的想通过UI使用它.

debugging windbg windows-7 gflags

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