c++ - CreateEventW 意外失败

标签 c++ winapi

如果我写这样一个简单的代码:

int main(int argc, char* argv[])
{
    HANDLE  hEvent = CreateEventW( NULL, FALSE, FALSE, L"EVENTTEST" );
    if (hEvent==NULL){
            cout<<"Error "<<GetLastError();
    }
    else{
            cout<<"Success";
    }

    getch();
    return 0;
}

代码运行时显示成功消息,但如果我在 main 之上的一般范围内添加一些声明(此处我仅通过声明 bool 变量添加一行代码),函数 CreateEvenetW 将失败,错误代码为 998。 如果我使用 CreateEvent 而不是 CreateEventW,则不会出现任何问题。但是我想知道当我添加一个像这样的简单变量声明时 CreateEventW 会发生什么:

bool x=true;
int main(int argc, char* argv[])
{
    HANDLE  hEvent = CreateEventW( NULL, FALSE, FALSE, L"EVENTTEST" );
    if (hEvent==NULL){
            cout<<"Error "<<GetLastError();
    }
    else{
            cout<<"Success";
    }

    getch();
    return 0;
}

这些奇怪的意外错误让我担心使用一些 winapi 函数。

我应该提到代码是用 Borland c++ 6 编译的

编辑:如果我在没有初始化的情况下声明变量(例如:bool x),则不会发生错误。此问题也只发生在某些数据类型上。我检查了类型(int、double)并且程序运行时显示“成功”消息。但是类型 (char,bool) 在初始化时会导致错误。

最佳答案

在 Windows 程序中出现错误 998 表明存在非常严重的问题。当内核本身可以判断进程堆已损坏时,您就会得到它。它通常是在程序未处于无法安全生成 AV 异常的状态时生成的,而不是因堆损坏而导致的正常访问冲突。当 Windows 加载程序忙于加载 DLL 并运行 DllMain() 入口点时,首先会发生这种情况。您的调试器显示第一次异常通知的可能性很大。无论如何希望。

您发布的代码当然不会得到此错误的重现,问题是由其他代码引起的。在 DLL 内部(最有可能)或在输入 main() 函数之前运行的初始化代码中。破坏堆当然是一个标准的 C++ 问题。您可能会从 Application Verifier 中找到帮助工具。祝你好运。

关于c++ - CreateEventW 意外失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361275/

相关文章:

c++ - makefile 未定义对已定义函数的引用

c++ - 一些测试,看看使用指针迭代和使用索引迭代生成的代码是否不同?

c++ - 使用指针的二维数组的非访问冲突

c++ - 如何为结构化文件系统编写 Makefile

c++ - 如何在编辑控件上自动隐藏滚动条

delphi - 使用 Windows AVIFile 函数提高 Delphi 6 应用程序的压缩率?

C++ 类似于汇编的指针访问

c - 如何让EUDC在不重启的情况下生效?

delphi - 使用 Delphi XE2 的 AnimateWindow

c++ - 无法让 Windows 覆盖图标在 TListView 中工作