2013-04-30 3 views
0

Что именно означает это исключение, и почему это происходит?Что вызывает Win32exception «Указанная процедура не найдена»?

Подробнее:

Это где это происходит:

Id = GlobalAddAtom("aString"); 

if (Marshal.GetLastWin32Error() != 0) 
{ throw new Win32Exception(); } 

Я знаю, что GlobalAddAtom действительно в kernel32.dll (вот где я DllImporting его из списка).

+0

[MSDN - указанная процедура не найдена.] (Http://msdn.microsoft.com/en-us/library/ms832056.aspx) –

+0

Но что это значит? Если я DllImport и вызывается NonExistantFunction() из kernel32.dll, то я получаю совершенно другое исключение: «Невозможно найти точку входа с именем« NonExistantFunction »в DLL« kernel32.dll ».». Это означает, что GlobalAddAtom() действительно находится в файле kernel32.dll. Так это в «модуле», правильно? – user2320724

ответ

1

GetLastError возвращает последнюю ошибку, вызванную любой функцией API.

Проверьте, что возвращаемое значение идентификатора равно нулю - только в этом случае GlobalAddAtom завершился с ошибкой.

+0

Спасибо, на самом деле мне не помогает .. Я уже знаю его Win32Exception, означающий, что он пришел из вызова функции Win32. Просто не понимаю, почему это происходит. Тем более, что GlobalAddAtom() возвращает отрицательное значение (не равно нулю), что означает, что он не терпит неудачу. – user2320724

+1

ОК, ваш ответ был не совсем явным, но вы правы. Win32Exception был там до моего вызова GlobalAddAtom(). Похоже, что это было даже в самом начале моей программы. Что нужно сделать, это проверить возвращаемое значение GlobalAddAtom(), и только если это не сработает, мы сможем использовать GetLastWin32Error(). – user2320724

+0

Да, извините - я мог бы выразить себя более четко. –

Смежные вопросы