小编c00*_*0fd的帖子

如何使用C#从派生类中的构造函数中捕获异常?

我想知道如何使用C#从派生类中的构造函数中捕获异常.这样的东西:

public class MyClassA
{
    public MyClassA()
    {
        //Do the work
        if (failed)
        {
            throw new Exception("My exception");
        }
    }
}

public class MyClassB : MyClassA
{
    public MyClassB()
    {
        //How to catch exception from a constructor in MyClassA?
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# constructor exception-handling

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

来自VS 2008中的C++/MFC编译器的奇怪结果

我以为我非常了解VS 2008 C++编译器:

CString str;
str.Empty();
LPCTSTR pStr = str.IsEmpty() ? NULL : str;
::MessageBox(NULL, pStr ? L"pStr is NOT null" : L"pStr is null", L"Result", MB_OK);
Run Code Online (Sandbox Code Playgroud)

有人可以解释我为什么得到这个?

在此输入图像描述

c++ mfc visual-studio-2008

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

如何使每个进程都可以访问同步互斥锁?

我需要使用全局互斥锁来同步多个进程对相互共享文件的访问。我这样创建互斥锁:

HANDLE hMutex = ::CreateMutex(NULL, FALSE, L"Global\\MySpecialName");
Run Code Online (Sandbox Code Playgroud)

然后在:

//Entering critical section
VERIFY(::WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0);
Run Code Online (Sandbox Code Playgroud)

进而:

//Leave critical section
VERIFY(::ReleaseMutex(hMutex));
Run Code Online (Sandbox Code Playgroud)

该问题源于以下事实:共享此互斥锁的进程是本地系统服务和几个使用登录用户凭据运行的用户模式进程。因此,如果互斥锁首先由服务创建,那么当用户模式进程尝试打开它时,会CreateMutex失败并显示错误代码ERROR_ACCESS_DENIED

在创建互斥锁之前,我正在阅读为它指定一个安全描述符,但我似乎无法弄清楚如何使其可访问everything,我在这里真的不需要任何复杂性?

c++ windows winapi synchronization mutex

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

如何从结构调用静态类方法?

我一直在避免在 C++ 中C++03使用以下内容(我相信在 VS 2008 中使用过),但现在我很好奇是否可以这样做?让我用代码解释一下。

//Definitions.h header file
//INFO: This header file is included before CMyClass definition because
//      in contains struct definitions used in that class

struct MY_STRUCT{
    void MyMethod()
    {
        //How can I call this static method?
        int result = CMyClass::StaticMethod();
    }
};
Run Code Online (Sandbox Code Playgroud)

然后:

//myclass.h header file
#include "Definitions.h"

class CMyClass
{
public:
    static int StaticMethod();
private:
    MY_STRUCT myStruct;
};
Run Code Online (Sandbox Code Playgroud)

和:

//myclass.cpp implementation file

int CMyClass::StaticMethod()
{
    //Do work
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ struct class visual-studio-2008

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

如何正确更新托盘通知图标?

说,我创建了我的图标:

//'ghIcon' of type HICON
ghIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, nCx, nCy, 0);
Run Code Online (Sandbox Code Playgroud)

然后将其设置为显示在系统托盘上:

NOTIFYICONDATA nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hMyWnd;
nid.uID = TRAY_ICON_ID1;
nid.uFlags = NIF_ICON;
nid.uCallbackMessage = TRAY_NOTIFICATION_ID1;
nid.hIcon = ghIcon;

Shell_NotifyIcon(NIM_ADD, &nid);
Run Code Online (Sandbox Code Playgroud)

然后在某个时候我想用一个新图标替换它:

if(ghIcon)
{
    //Delete old icon first
    DestroyIcon(ghIcon);
}

//Load new icon
ghIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(IDI_ICON2), IMAGE_ICON, nCx, nCy, 0);

NOTIFYICONDATA nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hMyWnd;
nid.uID = TRAY_ICON_ID1;
nid.uFlags = NIF_ICON;
nid.hIcon = ghIcon;

Shell_NotifyIcon(NIM_MODIFY, …
Run Code Online (Sandbox Code Playgroud)

c++ winapi trayicon system-tray windows-shell

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

如何防止我的Chrome扩展程序中的弹出窗口放大

我只是注意到,如果我在一个标签中放大网页(通过执行Ctrl-Plus),然后打开我的Chrome扩展程序的弹出窗口,它也会按比例放大.不幸的是,它使它显示垂直,并且在更大的范围内,甚至是水平滚动条.

我看到其他扩展以某种方式通过仅以100%缩放显示弹出窗口来阻止此缩放.问题是如何做到这一点?

javascript css google-chrome popupwindow google-chrome-extension

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

不调用chrome.tabs.sendMessage回调函数.为什么?

我有从Chrome扩展程序的后台脚本调用的以下方法.目标是将消息发送到特定选项卡,然后使用结果调用提供的回调方法.重要的是callbackDone必须始终在某个时间点调用.所以它是这样的:

function sendToTab(nTabID, callbackDone)
{
    (function()
    {
        chrome.tabs.sendMessage(nTabID, {
            action: "update01"
        }, 
        function(response) 
        {
            if(chrome.runtime.lastError)
            {
                //Failed to send message to the page
                if(callbackDone)
                    callbackDone(nTabID, null); //Page never received the message
            }
            else
            {
                //Sent message OK
                if(response.result === true)
                {
                    if(callbackDone)
                        callbackDone(nTabID, true); //Success!
                }
                else
                {
                    if(callbackDone)
                        callbackDone(nTabID, false);    //Page returns failure
                }
            }
        });
    }());
}
Run Code Online (Sandbox Code Playgroud)

然后从处理消息的页面内(可以注入content script)我处理它:

chrome.runtime.onMessage.addListener(onMessageProc);

function onMessageProc(request, sender, sendResponse)
{
    if(request.action == "update01")
    {
        //Do …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome message-passing google-chrome-extension

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

简单的PHP类可通过SendGrid服务发送电子邮件

我正在尝试将SendGrid事务电子邮件服务与PHP脚本集成到我的网站上。出于我的目的,我需要做的就是能够从我网站的“联系”页面发送一封基于文本的电子邮件。就是这样!

因此,我发现这个PHP库中不幸有太多的“东西”。我不希望将1.7 MB的PHP代码上传到服务器,而又不知道那里发生了什么。

所以我很好奇,是否有一个简单的PHP实现idk sockets用于连接到SendGrid服务器以执行以下操作?

  1. 向单个收件人列表发送一封纯文本电子邮件。

  2. 得到结果:成功/失败等。

php email sendgrid

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

为什么这个mov gs指令导致运行Windows 7操作系统的VMWare Workstation guest虚拟机出现故障?

当我在VMWare Workstation虚拟机中运行的Windows 7 x64的内核模式下运行以下汇编序列时:

xor eax, eax
mov ax, gs
mov gs, ax     ; this instruction
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最后一条mov gs, ax指令会立即导致该VM崩溃(或可能是错误检查),并显示以下弹出消息:

在此输入图像描述

发生故障导致虚拟CPU进入关闭状态.如果此故障发生在虚拟机之外,则会导致物理计算机重新启动.通过错误配置虚拟机,客户机操作系统中的错误或VMWare Workstation中的问题可以达到关闭状态.

重新加载gs寄存器会导致内核中的问题,还是虚拟化问题?

我没有看到mov英特尔手册中有关该指令的任何异常.

PS.顺便说一句,更换gs寄存器fs不会导致此错误.


编辑:回答有关GDT中段描述符状态的问题.这里是:

0: kd> r gs
gs=002b
0: kd> dg 28
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0028 00000000`00000000 00000000`ffffffff Data RW Ac 3 Bg Pg P …
Run Code Online (Sandbox Code Playgroud)

virtualization vmware assembly kernel windows-kernel

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

MFC基于对话框的应用程序标题栏突出显示Windows 10上的可视化工件(即CDialogEx中的错误)

我不确定为什么我会得到这个视觉神器?

以下是如何重现:

我正在使用Visual Studio 2017社区.创建一个新的C++ - > MFC项目:

在此输入图像描述

然后指定"基于对话框":

在此输入图像描述

然后构建为"Debug"x86应用程序并运行它.

所以我在Windows 10上运行它.

当这个基于对话框的过程具有焦点时,它看起来像我期望的那样:

在此输入图像描述

但如果我将键盘焦点切换到其他应用程序(通过点击它),这个基于对话框的过程仍然保留其标题栏颜色:

在此输入图像描述

我不确定这是否只是一个视觉故障的问题,或者是否有更深层次的窗口消息处理问题.我该如何纠正?(对于较旧的MFC项目,这不是问题.)

c++ user-interface mfc windows-10 visual-studio-2017

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