Объявление API функций (Варианты)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Объявление API функций (Варианты)

Сообщение Diamock » 19.06.2011 (Вс) 19:52

Здравствуйте Уважаемые!
В сети вычитал следующее, про объявление функций API.
Для примера возьмём функцию SetCurrentDirectory
Обычное объявление:
Код: Выделить всё
Declare Function SetCurrentDirectory _
     Lib "kernel32" Alias _
     "SetCurrentDirectoryA" ( _
     ByVal lpPathName As String _
     ) As Long

Название функции в программе может отличаться от действительного названия функции. Также могут отличаться названия параметров. Главное, чтобы соблюдалась их очередность и тип. Например, функцию SetCurrentDirectory можно объявить так:

Код: Выделить всё
Declare Function SetCurDir _
     Lib "kernel32" Alias _
     "SetCurrentDirectoryA" ( _
     ByVal PathName As String _
     ) As Long

Насколько, часто такое практикуется и, если практикуется - чем обусловлено?
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Объявление API функций (Варианты)

Сообщение FireFenix » 19.06.2011 (Вс) 19:56

Diamock писал(а):Насколько, часто такое практикуется и, если практикуется - чем обусловлено?

Хотением программиста
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Объявление API функций (Варианты)

Сообщение Diamock » 19.06.2011 (Вс) 20:03

FireFenix писал(а):
Diamock писал(а):Насколько, часто такое практикуется и, если практикуется - чем обусловлено?

Хотением программиста

Это и так понятно. Для какой цели? Если проект - закрытый и не предполагает распространение исходного кода, нет смысла в своих названиях функций. Если - наоборот, тем более.
Существуют же правила написания кода, иначе не появился бы такой термин - "быдлокод".
In der Beschrankung zeigt sich erst der Meister
Графоманю...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Объявление API функций (Варианты)

Сообщение alibek » 19.06.2011 (Вс) 20:46

Diamock писал(а):Для какой цели?

Для целей программиста.

Попробуй объявить функцию GetObject.
Или под одним именем объявить четыре функции CopyMemory, по разному декларированные.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление API функций (Варианты)

Сообщение Хакер » 19.06.2011 (Вс) 21:16

alibek писал(а):Попробуй объявить функцию GetObject.

Вообще-то она объявится без каких-либо проблем.

Diamock, сущность в таблице экспорта вполне себе может называться так:
Код: Выделить всё
?UpdateFrequency@AInventory@@UAEMPAVAActor@@AAVFVector@@1@Z
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Объявление API функций (Варианты)

Сообщение Diamock » 19.06.2011 (Вс) 21:44

Получается, что применять это надо, в тех случаях, когда название функции имеет не вполне читаемый вид или название не несёт никакой смысловой нагрузки?
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление API функций (Варианты)

Сообщение Хакер » 19.06.2011 (Вс) 21:48

Применять это нужно тогда, когда программист считает, что применять это нужно. А указанное выше имя несёт такую огромную смысловую нагрузку, какую ещё поискать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Объявление API функций (Варианты)

Сообщение Diamock » 19.06.2011 (Вс) 21:52

А можно, пример (ну, конечно прямо сейчас необязательно), потому что очень хочется определиться с этим нужно/не нужно.
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление API функций (Варианты)

Сообщение Хакер » 19.06.2011 (Вс) 21:58

Тебе уже привели несколько примеров.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Объявление API функций (Варианты)

Сообщение hclubmk » 20.06.2011 (Пн) 11:12

Ещё такой пример:
Код: Выделить всё
Declare Function SendMessageA Lib "user32.dll" ( ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Declare Function SendMessageAsLong Lib "user32.dll" ( ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Long) As Long
Declare Function SendMessageAsString Lib "user32.dll" ( ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As String) As Long
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление API функций (Варианты)

Сообщение Хакер » 20.06.2011 (Пн) 17:27

Да что там SendMessage, достаточно посмотреть на VarPtr—StrPtr—ObjPtr.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление API функций (Варианты)

Сообщение ger_kar » 20.06.2011 (Пн) 18:38

Прочитал этот пост и возникло просто непреодолимое желание вставить свои пять копеек :)
В примерах с SendMessage и в ряде аналогичных случаев объявление функций под разными именами можно сказать - насущная необходимость, но есть и другие случаи. Приведу свой пример. У меня друг обучался программированию и по началу с трудом различал функции пользователя, стандартные функции, а уж API тем более для него в тот период было "темным лесом". Для того, чтобы ему легче было ориентироваться и разбирать мои примеры кода, которые я ему отсылал я пошел не небольшую хитрость. Все пользовательские процедуры и функции начинались с префикса 'us' , а когда дело дошло до API, то такие функции начинались с префикса 'api' . Эта затея себя полностью оправдала. Кстати, с тех самых пор, у меня осталась привычка объявлять все глобальные переменные с префиксом gl_ .
Так что, как сказал FireFenix все определяется хотением программиста.
Бороться и искать, найти и перепрятать

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Объявление API функций (Варианты)

Сообщение Diamock » 23.06.2011 (Чт) 19:10

Всем БОЛЬШОЕ СПАСИБО! разобрался. :D
In der Beschrankung zeigt sich erst der Meister
Графоманю...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 59

    TopList