Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Windows API. CreateDirectory показывает провал, а GetLastError показывает успех. / 7 сообщений из 7, страница 1 из 1
23.01.2012, 16:41
    #37627349
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
Доброго времени суток.
Windows API не работают так как указано в документации. На msdn.microsoft.com сказано что если создаваемый каталог уже существует то CreateDirectory вернет 0, а GetLastError вернет ERROR_ALREADY_EXISTS, но в моем проекте в этой ситуации GetLastError возвращает 0, хотя в программе на Си все работает как сказано в документации, мне нужен такой же результат в VB.
Как побороть эту проблему?

VB6, Windows XP SP3

Код: vbnet
1.
Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, ByVal lpSecurityAttributes As Long) As Long



Ссылка на соответствующую статью на msdn.microsoft.com
...
Рейтинг: 0 / 0
23.01.2012, 16:57
    #37627403
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
nrmBeginner,

Вызов функции, объявленной через Declare, имеет скрытое дополнение в виде вызова GetLastError. Результат помещается в Err.LastDllError. Поэтому следующий явный вызов GetLastError будет возвращать 0.

Выхода два: 1) просто пользоваться Err.LastDllError; 2) вместо описания функций через Declare описывать их в своей библиотеке типов без атрибута usesgetlasterror, что укажет компилятору, что вызов GetLastError программист будет делать сам.
...
Рейтинг: 0 / 0
23.01.2012, 17:08
    #37627434
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
13-й квартал,
Вот бл. Наиогромнейшее вам спасибо.
...
Рейтинг: 0 / 0
23.01.2012, 17:51
    #37627576
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
> Автор: 13-й квартал
> Вызов функции, объявленной через Declare, имеет скрытое дополнение в виде вызова GetLastError.

А это где-то описано? или личные наблюдения?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.01.2012, 18:11
    #37627641
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
Игорь Горбонос,

я впервые увидел это в одной из статей Мэтью Кёрланда (скорее всего, есть и в его книге). Также где-то это было, ЕМНИП, у Брюса МакКинли.
...
Рейтинг: 0 / 0
23.01.2012, 18:25
    #37627674
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
Игорь Горбонос,

ну да, у Кёрланда. Потом ещё посмотрел в библиотеке MSDN описание атрибута.
...
Рейтинг: 0 / 0
23.01.2012, 18:39
    #37627708
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Windows API. CreateDirectory показывает провал, а GetLastError показывает успех.
Я понял, спасибо. Я раньше активно использовал АПИ функции, но такого поведения не замечал. Век живи, век учись :)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Windows API. CreateDirectory показывает провал, а GetLastError показывает успех. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]