Если написать простой код, как это:CreateEventW неожиданно терпит неудачу
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;
}
код работает с успехом сообщения, но если я добавить объявление в общем объеме выше основной (здесь я только добавить строку кода, объявив переменная bool) функция CreateEvenetW Fails с кодом ошибки 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
EDIT: Если я объявить переменную без инициализации (например: BOOL х) ошибка не происходит. Также эта проблема возникает только с некоторыми типами данных. Я проверил типы (int, double), а программа запускалась с сообщением «Успех». Но типы (char, bool) приводят к ошибке при их инициализации.
Возвращаемые значения документируются [здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682396 (v = vs.85) .aspx), но 998 не среди них (998 - ERROR_NOACCESS). Хотя функции ведут себя по-другому, просто из-за 'bool x = true' звучит скорее как проблема с компилятором из 2002 http: //en.wikipedia.org/wiki/C% 2B% 2BBuilder –
@herohuyongtao Я * умираю *, чтобы знать, что это связано с прямым вызовом Unicode-версии 'CreateEvent' с жестким Unicode-именем. Скажите plz. – WhozCraig
GetLastError возвращает 998, а отсюда http://msdn.microsoft.com/en-us/library/windows/desktop/ms681388(v=vs.85).aspx вы можете видеть, что он говорит: Недействительный доступ к ячейке памяти. – user2808671