Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: ya12 on September 08, 2018, 08:19:38 PM
-
Как передать в CALL("Plugin.DLL", число1, число2, ..., числоN) неизвестное заранее количество чисел?
Через текстовый файл не желательно из-за частого вызова Plugin.DLL. Одно число изменяется постоянно, остальные считываются 1 раз из файла, 1 раз изменяются и все это передается в плагин.
-
А от чего зависит это количество? Если это массив, то вот похожая тема http://crapware.aidf.org/forum/index.php?topic=3905.0 . Только костылики :(
Впринципе для длл можно отправлять просто какоето максимально возможное количество элементов. А задействованы будут только те, которые нужны, остальные прописать нулями к примеру.
Ты бы показал пример хоть какой, было бы нагляднее.
-
Это границы области за которые не должен забегать бот, поэтому переменная часть может быть от 4 пар координат + непроходимые участки внутри области. DLL раз в несколько секунд по координатам строит в TBitMap внешние и внутренние линии, заливает определенным цветом рабочую область. Во круг координат бота(или его цели) определяем цвет и узнаем внутри он или снаружи.
Костылики с записью в файл не подойдут, тогда проще читать переменную часть из файла.
Буду передавать максимально возможное количество, а лишнее забивать 0.
-
Так а чем не подходит вариант что я описал выше?
Пишем все нужные параметры в массив, будь они в файле или еще где. И не важно сколько их, пишем в начало массива. Потом дописываем в этот массив какоето число пустых элементов (0 или -1). Это число элементов = максимуму который возможен, будь то 100, 200 или 1000. И вызываем длл с этими всеми параметрами. В этой библиотеке уже читаем только те первые параметры, которые не "пустые".
Если этих параметров может быть реально много, то я думаю, ничего страшного не случится. Вызов можно в инклуд засунуть, чтоб не мешалась перед носом длиннющая строка.
Что то типа:
TFREADARR ("par.txt", $arr) //читаем все параметры из файла, сколько их, нам не извесно
//если они не в файле, то просто пишем по очереди в этот массив.
FOR($a=ARRSIZE($arr) ,$a < 20) //добавляем параметры до 20 элементов, возможно это и не требуется, на всякий случай
ARRPUSH($arr, 0) //если их может быть больше, пишем больше
END_CYC
//ну и вызов их всех
CALL("Plugin.DLL",$arr[0],$arr[1],$arr[2],$arr[3],$arr[4],$arr[5],$arr[6],$arr[7],$arr[8],$arr[9],$arr[10],$arr[11],$arr[12],$arr[13],$arr[14],$arr[15],$arr[16],$arr[17],$arr[18],$arr[19])
//а в самой длл, просто читаем попорядку параметры до то того у которого значение =0 (можно записывать не 0, а какое другое ненармальное значение, типа -1)
Мне больше ничего в голову не пришло :(. Ну и плюс еще те, что ты сам предложил выше - передача через .ини или через другой файл.
К стати, таким способом можно и строки передавать ::). Жаль что в ответ библиотека может отдать только 4 байта :P, но опять же, никто передачу через файл не запрещает.
добавлено:
Пока писал, вижу ты уже и сам решил, что так будет проще.
Буду передавать максимально возможное количество, а лишнее забивать 0.
-
Не нужно ничего забивать нулями, это лишняя трата времени, тем более кликером.
Нужно выделить первый параметр под число-количество активных параметров.
Остаётся заполнять нужные остальной мусор бросать как есть.
И неужели в делфи нет возможности передавать разное количество параметров? В питоне есть. И позиционных *args, и именованных **kwargs
-
И неужели в делфи нет возможности передавать разное количество параметров? В питоне есть. И позиционных *args, и именованных **kwargs
:-\ Я даже и не знаю, но судя по написанному в справке
Все что вам необходимо знать - это формат экспортной функции, которую вызывает кликер. Она выглядит так в стандарте С++:
int execute(int* _arr, int _size)
эта функция int. В дэлфи - integer, ...ну какбы одно и тоже.
Можно попробовать конечно...
Попробовал передать int64. Кликерман не принимает такое (возврат = 0), хоть функция и выполняется верно.
-
Остаётся заполнять нужные остальной мусор бросать как есть.
Если не дать значений всем элементам массива, то интерпретатор при обращении выдает ошибку.
print($arr[102]) //$arr[102] ранее не вызывался и ничему не равен
-
Если не дать значений всем элементам массива, то интерпретатор при обращении выдает ошибку.
Я не сказал не давать изначально, я сказал "не обновлять каждый раз".
Ну есть, допустим 500 значений. Массив создаём честно занеся все 500.
Первая отправка, действительных 300 - обновляем 300 и проставляем количество.
Вторая отправка, действительных 100 - обновляем 100 и проставляем количество (не нужно оставшиеся затирать, там остаются старые значения)