|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||||||||
Тонкости передачи параметров в функции и процедуры30.04.2020, 23:29. Показов 8817. Ответов 30
Метки com_для_начинающих, power basic, powerbasic, vb, visual basic, winapi, winapi_для_начинающих, winapi_и_com, азбука com, азбука winapi, аргумент функции, аргументы_функций, глупые заблуждения, интерфейс vb и com, интерфейс vb и winapi, параметры функции, параметры функций, передача_параметров, тонкости передачи параметров (Все метки)
Вот 2 приблизительно одинаковых простеньких примерчика на VB:
======================================== =============
0
|
|||||||||||
| 30.04.2020, 23:29 | |
|
Ответы с готовыми решениями:
30
Способы передачи параметров в процедуры
функции в языке с: (использовать механизм передачи параметров по ссылке) |
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||||
| 03.05.2020, 21:31 [ТС] | ||||||||
![]()
0
|
||||||||
|
Модератор
|
||||
| 03.05.2020, 21:48 | ||||
|
0
|
||||
|
63 / 48 / 12
Регистрация: 28.12.2014
Сообщений: 270
|
|||
| 04.05.2020, 11:31 | |||
|
Если в структуре на СИ указана массив символов CHAR WCHAR, то строковое поле нужно в VB объявить как строковое поле постоянной длины или массив байт. Для строки с постоянной длиной, данные строки будут храниться в самой структуре, если объявить поле как динамическую строку, то в данном поле будет записан указатель на строку, а не строковые данные. Совсем не то, что будет ожидать СИ функция. Подробнее можно почитать Эплман стр. 881, если есть желание.
1
|
|||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||||||||||||
| 04.05.2020, 23:48 [ТС] | |||||||||||||||
![]() Вот фрагмент из той программы:
Вот тогда-то и возникло неприятное чувство, что размер буфера (в данном случае я выбрал величину 10000 байт) приходится "снимать с потолка". Выбирал "с запасом", чтобы уже наверняка ![]() Ну да ладно, это не самый важный вопрос во всей этой "музыке". Работает, ну вот и хорошо. Теперь мне, по крайней мере, стало понятно, что подразумевается под обозначением const и WCHAR в комментах заголовочного файла, фрагмент из которого я процитировал выше и для удобства процитирую здесь ещё раз:
Добавлено через 1 час 47 минут Не по теме: А вот интересно, я смотрю какой-то трусливый аноним прикрепил к этой ветке метку "глупые заблуждения". Аноним, давай уже выскажись аргументированно. Обсудим. Если заблуждения, то обязательно глупые, так что ли? Сам-то ты хоть умный или только таким прикидываешься? :) Добавлено через 8 минут Не по теме: И вопрос к модераторам. Добавлено через 4 часа 30 минут Не по теме: Да ладно, пошутил я :)
0
|
|||||||||||||||
|
63 / 48 / 12
Регистрация: 28.12.2014
Сообщений: 270
|
|||
| 05.05.2020, 04:32 | |||
|
Добавлено через 9 минут В VB передавать строку "BYREF pwcs AS WSTRINGZ" можно если только вызываемая функция поддерживает oleautomation, СИ функции, как правило, его не поддерживают, с помощью ByRef вы передаете в вызываемую функции указатель на заголовок BSTR строки, содержащий длину строки, а не указатель на содержимое строки. Формат СИ строки и BSTR можно посмотреть в MSDN.
0
|
|||
| 05.05.2020, 10:47 | |
|
0
|
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 05.05.2020, 17:21 [ТС] | |||
![]() А что касается PowerBasic'а, то я уже говорил в одном из предыдущих постов, что по какой-то причине у всех поклонников этого диалекта "модно" передавать этот параметр в функцию Speak именно так ![]() По всей видимости, во времена SAPI 5.0 и первых версий компилятора PB такой неуклюжий подход был единственно возможным. Ну вот с тех пор и копируют эту тяжеловесную конструкцию из программы в программу вплоть до наших дней по принципу "ну оно же прекрасно работает, ну и зачем что-то менять" ![]() ![]() Отсюда и такая огромная цифра, снятая с потолка по принципу "да на обожрись, только отстань от меня со своим буфером!" ![]() Там в семействе функций WINAPI PDH приходится сразу к нескольким функциям обращаться, чтобы в конечном итоге значение счётчика производительности получить. Ну вот оно всё вместе и не получалось тогда очень долго. Ну а сейчас, оглядываясь назад, всё выглядит довольно лёгким и очевидным. И даже скажу больше, мне эта функция в конечном итоге вообще не понадобилась, но просто она сохранилась в черновиках, ну вот и привёл её в качестве примера, когда заранее требуется указывать размеры принимающего информацию буфера.
0
|
|||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||||||||||
| 08.05.2020, 16:26 [ТС] | |||||||||||||
![]() И это не слепое копирование из программы в программу, а вполне резонное. Если строки маленькие, тогда пофиг, конечно, пусть компилятор копирует нашу строку в какое-то место динамической памяти и передаёт в Speach API ссылку на эту копию. А если строка огромная?! Тогда имеем в памяти саму строку (оригинал) и копию строки одновременно, а это уже не хорошо хотя бы с точки зрения хорошего стиля. Как вариант можно было бы вроде бы сразу же удалить оригинал, и тогда в памяти у нас снова только одна строка. Но мы это слелать не можем, потому что в дефолтном варианте вызова функции Speak вызывающий код блокируется вплоть до завершения работы вызываемого. Ну то есть так и останутся у нас в памяти надолго две огромные строки одновременно.
0
|
|||||||||||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||
| 09.05.2020, 17:14 [ТС] | ||
|
Тонкости передачи параметров в функции и процедуры Но на самом деле, теперь это не такой уж и важный вопрос, чтобы на нём так подробно останавливаться. Главное, что я уже понял, как это в принципе работает и мне этого вполне достаточно. Просто я высказал неверное предположение в одном из своих предыдущих постов, ну вот и, вроде как, принёс свои извининения. По правде сказать, сейчас у меня началась новая интенсивная фаза "допиливания" моего Аудио_бук_мейкера, поэтому мне вот прямо сейчас не до тонкостей теории ![]() Хочется побыстрее воплотить несколько свежих идей и посмотреть, что из этого получится.
0
|
||
| 09.05.2020, 17:14 | |
|
Процедуры и функции без параметров. Процедуры и функции без параметров: Из массива удалить последний из четных элементов Нужно заменить процедуры с параметрами, на процедуры без параметров Программа передачи параметров Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой
Зрите в корень - монополизация на разработку программ. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|