小编Joh*_*ohn的帖子

ServiceBase.Run,​​为什么我不能捕获它的异常,或者以其他方式对它们做出反应?

我从入口点静态 main 方法调用以下内容:

    try { ServiceBase.Run(new MonitorSer()); }
    catch (Exception ex) { Console.WriteLine(ex.Message + Process.GetCurrentProcess().MainModule.FileName); }
Run Code Online (Sandbox Code Playgroud)

MonitorSer 是以下实例:

class MonitorSer : ServiceBase {
Run Code Online (Sandbox Code Playgroud)

入口 main 方法是我的类的成员:

[RunInstaller(true)]
public class WindowsServiceInstaller : Installer {
Run Code Online (Sandbox Code Playgroud)

我在捕获异常进行调试方面取得了很好的结果,但有时它们似乎会找到自己的方法来绕过我的陷阱,就像在本例中一样。

我得到一个 Windows 框,告诉我需要使用 installutil 安装,而我真正想要的是找到该进程的名称,并使用我已连接的 -i 开关再次调用它,以使其安装 intself (归功于那些贡献/回收该代码的人)。

更令人沮丧的是,如果我在对 ServiceBase.Run 的调用之前设置断点,它将默默地失败,并且留下闪烁的控制台。

更新

    static void Install(bool undo, string[] args)
    {
        try
        {
            Console.WriteLine(undo ? "uninstalling" : "installing");
            using (AssemblyInstaller inst = new AssemblyInstaller(typeof(MonitorSer).Assembly, args))
            {
                IDictionary state = new Hashtable();
                inst.UseNewContext = true;
                try
                {
                    if …
Run Code Online (Sandbox Code Playgroud)

c# windows-services exception try-catch

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

C++数组初始化器.使用枚举类型

class ARouter {
    enum directions {north, neast, east, seast, south, swest, west, nwest};
    static directions gon[] = {north, neast, nwest, east, west, seast, swest, south};
};
Run Code Online (Sandbox Code Playgroud)

嗨,有谁知道上面的代码是什么问题?

我从VC++ 2008Ex获得第二行的2个错误:

错误C2059:语法错误:'{'

错误C2334:'{'之前的意外标记; 跳过明显的功能体

c++ arrays enums initializer

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

为什么我的 Win32 API 调用需要“A”后缀,我应该纠正它吗?

从我需要的 Win shell 执行命令

ShellExecuteA(NULL, "open", "http://stackoverflow.com", NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)

现在我正在学习 Forgers Win32 教程,我发现 A 后缀是必要的,以防止将垃圾打印到屏幕上。我知道这与我的操作系统默认的字符格式有关。如果我可以“规范化”我的操作系统,那可能是最好的解决方案,因为RegisterClassExA无论我在第二个示例中使用多少个 *A 函数,我都会返回 NULL (下面使用我添加的 *A 后缀的 llloottttssss 进行复制)

#include <windows.h>
const wchar_t g_szClassName[] = L"myWindowClass";
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{/*...*/
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;
    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc …
Run Code Online (Sandbox Code Playgroud)

c++ winapi tchar wchar

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

将对象(不是指针)向下转换为已知的派生类型是否安全?

会有切片的危险吗?

result Compare(const Osp::Base::Object &obj1, const Osp::Base::Object &obj2, int &cmp) const {
    cmp = ((const Block)obj1).NumSuperBlocks() - ((const Block)obj2).NumSuperBlocks();
}
Run Code Online (Sandbox Code Playgroud)

哪里

class Block : Object {/*Filler*/}
Run Code Online (Sandbox Code Playgroud)

obj1obj2放心是Block对象?

我很想用:

    cmp = ((const Block*)&obj1)->NumSuperBlocks() - ((const Block*)&obj2)->NumSuperBlocks();
Run Code Online (Sandbox Code Playgroud)

但在阅读SO的对象切片标签的简要描述时,我很想使用前者.但我真的不想要任何讨厌的无声切片.

c++ downcast object-slicing

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

当函数接受对象的引用(并访问非const方法)时,如何抛弃const'ness?

我有一个备份的数据副本,我想保护,所以我做了const.我需要const在两个场合违反这个问题,一次将原始数据存储到它:

fgBlocks.CopyInto((BlkArray&)backUpCopy);
Run Code Online (Sandbox Code Playgroud)

WRT

result CopyInto(BlkArray &replica) const {/**/}
Run Code Online (Sandbox Code Playgroud)

当我调用RemoveAll()它时,这是一个非const方法:

((BlkArray)backUpCopy).RemoveAll(true);
Run Code Online (Sandbox Code Playgroud)

第一个演员(如上所示(BlkArray&))是否正确?这是间接的一个方面,我现在还没有.然后,我将再添加一个未使用的方面,即抛弃const用于调用对象方法的方法,编译器不接受如上所示的方法.

成员声明如下:

BlkArray fgBlocks;
const BlkArray backUpCopy;
Run Code Online (Sandbox Code Playgroud)

我正在尝试扩展Correa的解决方案,所以:

    BlkArray *pBUCopy = (BlkArray *)&backUpCopy;
    fgBlocks.CopyInto(*pBUCopy);
Run Code Online (Sandbox Code Playgroud)

现在唯一的问题是编译器由于失败而失败

未初始化的成员'MyClass :: backUpCopy'与'const'类型'const BlockArray'

c++ casting const

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

将DllImport从C#console app中的静态类的静态成员转换为C++ CLR控制台应用程序的成员

我有以下内容,我不能转移围绕DllImport的错误

#include "stdafx.h"
#include <msclr/auto_gcroot.h>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Runtime::InteropServices;
using namespace System::Threading;
using namespace System::Collections::Generic;
using namespace System::Text;

namespace WinFlix
{
    class FlickWin
    {
        [DllImport("user32.dll")]
        extern "C" bool SetForegroundWindow(IntPtr hWnd);
Run Code Online (Sandbox Code Playgroud)

我一直在从C#转换这个类,它是一个static类,在C++ .NET中不可用.我的新C++项目是"CLR控制台应用程序"类型.

我明白了

错误C2059:语法错误:'string'

错误C2238:';'之前的意外标记

都指的是'extern"C"'行.

我已经搜索过我之前的工作,虽然我能胜任C++/CLI,但我之前不必调用这样的WinAPI函数.这两个错误都是在打我: - /

TBH,这件事耗尽了我的耐心而我删除了它,可以回去重新创建它,但我更喜欢修复我的C#而不是.尽管如此,请帮助赞赏以供参考

c# translation c++-cli dllimport static-classes

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

在 C++ 中,如果我使用释放析构函数 ~MyClass 引用一个对象,超出范围的引用是否会调用析构函数?

下面的方法总是有效吗?

class MyCLass {
    int *pInt;
public:
    MyCLass() {
        pInt = new int;
        *pInt = 42;
    }
    ~MyCLass() {
        delete pInt;
        printf("Goodbye cruel world!");
    }
    void func1() {
        printf("Hello World %d", *pInt);
    }
};

MyCLass foo;
{
    MyClass &bar = foo;
    //Do stuff
}
foo.func1();
Run Code Online (Sandbox Code Playgroud)

我担心在它的任务中精确模拟原始对象bar会导致析构函数在超出范围时被调用。

c++ scope reference

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

我的类包含1个枚举,2个int和一个指针.它没有虚函数,但测量20个字节.为什么?

根据标题.我真的不想列出它包含的所有其他成员但是我很惊讶地发现,只有非静态数据成员才是enum,2 int和指向自己类型的指针sizeof应该是20.

它没有虚函数,我测量了指针,enum每个都有4个字节.其他会员我应该更加努力吗?

从文件读回时,我需要此信息为其类型的n个对象分配缓冲区.

平台:bada,环境:Win 7 x64中的gcc和Eclipse.

enum blockParams {enum1, enum2, /**/};
class Block : public Object {
public:
    int begin;
protected:
    Block() : begin(-1), end(UNCLOSEDBLOCK) {}
    //Last index
    int end;
private:
    blockParams1 params;
    const Block *parentBlock;
//Lots and lots (~80) member functions and static data members.
}
Run Code Online (Sandbox Code Playgroud)

c++ size class sizeof

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

"从'const myClass'类型无效转换为'int'类型",我怎样才能使它有效?

我从库头的以下摘录中的最终函数中收到关于return语句(或强制转换)的错误

///////////////////////////////////////////////////////////
// class __HashMapDefaultProviderT

/**
* @internal
* @class    __HashMapDefaultProviderT
* @brief    This is an implementation of the IHashCodeProviderT interface for the HashMap class.
* @since    1.0
*/
template<class KeyType>
class __HashMapDefaultProviderT
    :   public IHashCodeProviderT<KeyType>,
    public Object
{
public:

    // Lifecycle

    /**
    * This is the default constructor for this class.
    *
    * @since     1.0
    */
    __HashMapDefaultProviderT(void) {}


    /**
    * This is the destructor for this class.
    *
    * @since     1.0
    */
    virtual ~__HashMapDefaultProviderT(void) {}


    // Operation

    /**
    * …
Run Code Online (Sandbox Code Playgroud)

c++ eclipse casting typecast-operator

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

什么容器允许binary_search'ing和随机删除元素?

我一直在使用std::vector但它变得笨拙,因为它迭代的数据已经增长,我希望能够在它们变得多余时过滤掉随机元素.我在其他地方有这种行为,std::list但无法binary_search与之相提并论.

是否有一些我可以用来重新binary_search开始工作的代码,或者我是否必须使用更复杂的容器和语法?

        if(binary_search(iter + 1, myLines.end(), line)) {
            firstFound.assign(line);
            if (numFinds++) break;
        }
Run Code Online (Sandbox Code Playgroud)

c++ containers stl list map

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