|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||||||||||||||||||
Альтернативный вызов функции15.08.2014, 10:44. Показов 6795. Ответов 66
Метки нет (Все метки)
1. Интересует метод вызова функции через указатель(или по другому).
2. Интересует метод взятия кол-ва аргументов функции и их типов, а так же тип возвращяемого значения. По второму пункту вообще ничего не нашёл, а по первому есть некоторые вопросы.
Ещё заинтересовало такое:
П.С. Если это возможно, приводите пожалуйста примеры без использования STL и классов, а более приближенными к Си методами. Вообще по поводу пункта 2: подумалось, что если реализовать пример1, то нужен будет список функций, который я в принципе могу хранить в txt фале вместе с кол-вом аргументов и возвращяемым значением, хотя это будет тупое копирование строк из .h файлов, к примеру из winuser будут подобия:
Добавлено через 29 минут Узнал что это:
0
|
|||||||||||||||||||||||||||||||
| 15.08.2014, 10:44 | |
|
Ответы с готовыми решениями:
66
Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) |
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||
| 15.08.2014, 21:24 [ТС] | |||||||||||||||
|
Контроль наверно будет исходя из сравнения аргументов функции и передаваемых типов, тут уж сам накалякаю. =) По поводу питона - это уже бредово, заново изучать целый язык, опять куча синтаксических отличий... не, я хочу с компоновкой данных разобраться и перейти к графике и звуку, заново начинать не разумно. Кстати, а можно в качестве возвращяемого значения поставить void, а потом переопределить согласно возвращяемому значению? Типа чтоб написать:
Добавлено через 10 минут То что челы чё та там сделали - не решает сути того что я хочу не просто чтоб всё работало, а чтоб это выглядело понятно.(опять повторяюсь) Это я к тому что хочу чтоб программа сама плясала, а я ей только название танца давал бы. Ловить ошибки - с чего это? Если я правильно типы буду указывать и проверять, функции с непонятными типами - пропускать (ну доработаю если надо будет).
0
|
|||||||||||||||
| 15.08.2014, 21:27 | ||
|
тогда уже можно использовать неограниченое кол-во параметров(вроде в плюсах есть такая хрень, "..." ) Возможно я не прав, потому что давно плюсы изучал.
0
|
||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 15.08.2014, 21:29 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 15.08.2014, 21:38 [ТС] | ||
|
Voivoid, ты мне предлагаеш для каждой функции писать прототип или что? Ты если не согласен с моим методом - скажи свой, а то звучит как то странно. Но думаю что и ты не согласишся под 1000 функций писать прототипы.(даже если это сделает парсер, то как ни крути сколько же памяти сожрёт этот метод?)
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 15.08.2014, 21:39 | |||
|
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||
| 15.08.2014, 21:48 [ТС] | ||||||||
0
|
||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 15.08.2014, 21:57 | |||
![]() В общем - это тупиковый путь. Все эти "если" ты, имея только void*, не распознаешь. Добавлено через 4 минуты Izual, В общем я считаю, что тебе информации тут дали вагон и маленькую тележку. Разбирайся. По мне, так та библиотека - это лучший выход, если хочешь остаться в рамках С\С++. Но решать тебе. Короче, удачи.
0
|
|||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||
| 15.08.2014, 22:00 | |||
Сообщение было отмечено volodin661 как решение
Решение![]() В 80-х все мучились с динамическими массивами и вариантными типами из-за бедности языковых средств. Чтобы уменьшить сложность разработки ( ну и как следствие сократить количество испытываемой программистами боли ) в 90-х придумали шаблоны. В 2014 году читать, про то, что это все не нужно и надо все делать руками это, ну-ну-ну, кхм, весьма странно. PS: Если что, я тут с хронологией весьма вольно обошелся, но идея должна быть ясна.
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||
| 16.08.2014, 15:44 [ТС] | ||||||||||||
|
Так, выкладываю первые тесты.
Тест первый, просто статически описал загрузку функции MessageBoxA. (хотя мучался долго, пока не дописал "_stdcall" в прототипе функция вызывалась, но на возврате значения вылезала ошибка и прога рушилась) Прикрепил архив, где Test1.exe это он и есть. Тест 1 работает.
Результат выполнения: MessageBox появляется, но как только его закрываеш вылезает ошибка:
Тест 2.exe так же в архиве. П.С. Извиняюсь сразу за кучу инклюдов, я обычно не помню какие нужны, так что пихаю все подряд)))
0
|
||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||||||||||||||||||||||
| 16.08.2014, 17:45 | ||||||||||||||||||||||
|
Вот код:
В общем, как я уже говорил, работающий во всех случаях вариант без асма (хотя бы без знания) сделать будет тяжело (или даже невозможно). Добавлено через 34 минуты Вот код, который гененирует VS в релизе (я вручную добавил дебажную проверку):
Я переписал код для VS таким же способом и вставил проверку:
Не знаю чего тут посоветовать: юзай mingw, если не хочешь связываться с ассемблером
1
|
||||||||||||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||
| 17.08.2014, 08:43 [ТС] | ||||||
|
DrOffset, я нашёл другой выход, хотя он не так красив как тот который я хотел бы использовать (с троеточием), но зато решает проблему.
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 17.08.2014, 15:36 | ||
|
В общем в каких-то случаях работать будет, но это точно не самое корректное решение. Имей это в виду. Добавлено через 2 минуты Почитал бы ты литературу, на самом деле. А то, что сейчас - это же чистое шаманство. Хоть бы узнал на что тебе можно рассчитывать, а на что нет.
0
|
||
|
28 / 23 / 12
Регистрация: 25.08.2013
Сообщений: 44
|
|||||||||||||
| 17.08.2014, 16:47 | |||||||||||||
Альтернативный вариант:
Упрощенный вариант
3
|
|||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 17.08.2014, 16:53 | |
|
StailGot, качественный workaround.
Только вместо void *, для передачи указателя, лучше использовать FARPROC.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 17.08.2014, 19:59 [ТС] | |||
|
StailGot, то что вы показали это не вариант для меня, я сразу сказал что векторы и STL не предлогать.
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||||||||
| 17.08.2014, 20:20 | |||||||||
|
В интернете вообще вся толковая информация на английском, ища на русском много не накопаешь. Вот ссылку хотя бы изучи, которуя я уже давал, про calling convetions.
0
|
|||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||
| 17.08.2014, 21:03 [ТС] | |||||
|
П.С. Как же много всякой ерунды напридумывали, лишь бы людей отвлечь от действительно важных вещей... Вспомнился фильм "Generation П" : "Народу нужна хорошая драка, тогда он про всё забудет, про жену, про квартиру..."
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 17.08.2014, 22:41 | |||
Переводчик там тебе напереводит пожалуй.Учись, все равно как-то семью кормить потом придется
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 17.08.2014, 23:30 [ТС] | ||
|
Не по теме: есть разные пути, не только "оседлые"
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 17.08.2014, 23:50 | ||
|
Формально условие выполнено было
0
|
||
| 17.08.2014, 23:50 | |
|
Вызов функции визуал бейсика из функции явы скрипта Вызов функции из другой функции после нажатия на кнопку
Автоматический вызов функции при вызове функции Не работает без указателя вызов функции в функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool
Worker Pool — паттерн конкурентной обработки задач в Go.
Суть: фиксированное количество горутин-воркеров читают задачи из общего канала
и пишут результаты в общий канал результатов. . . .
|
|
[golang] Pipeline
alhaos 08.06.2026
Pipeline
Pipeline — паттерн конкурентной обработки данных в Go.
Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
|
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь
lIs4oanZS9Y
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|