Страница 1 из 1

Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 09.02.2022 (Ср) 0:48
bitcoin
Всем добрый вечер. Есть такой вопрос - неужели в VB все винапи функции нужно объявлять самому? А также все виндовс структуры и так далее?
Допустим, в Си или даже в Ассемблере есть инклуды готовые, и т.д. Есть ли подобное для Visual Basic?

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 09.02.2022 (Ср) 10:25
Mikle
Вместе с VB6 устанавливается "API Text Viewer", в нём есть довольно большой набор WinAPI функций, констант и типов.

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 09.02.2022 (Ср) 16:41
ger_kar
Лучше уж тогда Win API Viewer 2004 юзать (название пишу по памяти поэтому в нем могут быть ошибки) . Кроме этого, есть готовые TLB с объявлениями. Но при этом всегда нужно иметь ввиду, что и в API Text Viewer, что Win API Viewer 2004, что в библиотеках TLB есть ошибки. Я несколько раз на на этом попадал. Делаешь вызов, а он не работает в лучшем случае, а может и крэшем все закончится.
Другой момент, что не всегда, те объявления, которые предлагает Win API Viewer или TLB подходят под то, что ты делаешь. Бывает удобнее объявлять по другому и вызывать соответственно тоже. И если объявления с генерированные вьюверами можно подправить, то с TLB такое проделать не получиться.
И вообще на мой взгляд заморока с объявлениями в VB6 в большей степени касается структур, констант и перечислений, чем собственно самих функций. Давно в голове бродит идея сделать отдельную TLB для констант и перечислений. А в коде VB6 объявлять только сами функции. Со структурами сам пока еще не определился :)

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 10.02.2022 (Чт) 7:45
Хакер
bitcoin писал(а):Допустим, в Си или даже в Ассемблере есть инклуды готовые,

Они есть не в Си или ассемблере, они есть в составе комплекта заголовочных файлов, которые тот или иной поставщик распространяет для разработчиков. Си же не привязан к Windows и не ограничен экосистемой Windows, поэтому неправильно говорить, что заголовочные файля с объявлениями WinAPI идут в составе Си: они идут не в составе Си, они идут в составе Platform SDK или к приложении к Visual C++.

В VB существует аж два независимых пути объявления функций/структур/констант: это и объявление непосредственно в коде, и объявления, импортируемые из TLB. Для первого пути существует помощник в виде API Text Viewer-а. TLB-шек тоже народ понаделал разных.

Главная причина того, почему для VB из короки не поставляется таких готовых объявлений состоит в том, что всё-таки по задумке идеология VB была чуть другой: предполагалось, что VB-программистам почти никогда не нужно будет использовать WinAPI-функции, а их код будет как клей связывать воедино разные компоненты (наприсанные на Си/С++ и других языках, включая и сам VB), которые будут выполнять высокоуровневые задачи.

ger_kar писал(а):Давно в голове бродит идея сделать отдельную TLB для констант и перечислений.

Trick давно хочет сделать что-то такое, но ограничение в 32K неймрефов видится ему препятствием.

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 10.02.2022 (Чт) 10:12
The trick
Хакер писал(а):Trick давно хочет сделать что-то такое, но ограничение в 32K неймрефов видится ему препятствием.

Да, я хотел сделать объявления всех сущностей, благо это автоматом можно сделать, но суммарно все будет намного больше 32к. Одних API функций около 14 тыс, добавив список констант, структур, имен параметров, объявлений интерфейсов этот лимит я думаю будет исчерпан.

Вот есть уже готовый список функций https://dl.unicontsoft.com/upload/api_list.txt без констант и типов (параметры оставлены как As Any).

В своей практике я просто использую TLB из разных проектов. Если мне не хватает функций, то просто создаю копию TLB и добавляю новых функций. В следующий раз использую ее ну и так далее.

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 10.02.2022 (Чт) 11:06
Хакер
Просто не надо задаваться целью сделать 1 библиотеку типов на все DLL-библиотеки. В идеале: одна DLL-шка — одна TLB-шка. (Будь MS дальновиднее, они бы так и сделали и в каждую DLL-шку TLB-шку вшили в ресурсы). В виде исключения можно базис в виде kernel32, user32, gdi32, advapi32, oleaut32 объединить в одну.

Ни в одном реальном проекте никому не понадобятся одновременно 14 тысяч API-функций: чтобы одновременно и MAPI, и RPCRT, и WINMM, и DirectX — я такого не представляю.

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 10.02.2022 (Чт) 17:48
bitcoin
Mikle писал(а):Вместе с VB6 устанавливается "API Text Viewer", в нём есть довольно большой набор WinAPI функций, констант и типов.

Спасибо, не знал про это. Копипастил с инетов объявления.

Re: Все Winapi нужно объявлять вручную?

СообщениеДобавлено: 16.03.2022 (Ср) 15:21
Adam Smith
С каждым годом становлюсь всё невнимательнее
Существует чуть новее предложение, но тоже старое, ApiViewer 2004
https://apiviewer-2004.software.informer.com/download/
https://www.virustotal.com/gui/file/2c1 ... 58735777da