Архив за месяц: Апрель 2015
Отправка стакана из QUIK (QLua) в приложение C#
Автор записи: Дмитрий (Admin)
При отправке из терминала QUIK таких часто изменяющихся данных, как "СТАКАН", необходимо использовать обратную связь от C# о получении данных. Так же, на стороне QLua необходим буфер (стек), в который будут заноситься и из которого, в последствии, будут отправляться новые данные, по мере получения их приложением C#. На практике этот процесс происходит очень быстро, так что данные не успевают задерживаться в стеке в ожидании своей очереди. Благодаря чему, приложение C# всегда своевременно получает актуальные изменения. А благодаря стеку, ни одно изменение не останется упущенным.
Примеры кода:Смотреть полностью...
Как отправить команду в QUIK из приложения C#
Автор записи: Дмитрий (Admin)В статье "Обмен данными между DLL (C/C++) и приложением C#" показан простой пример отправки сообщений из DLL в приложение C#, а QUIK(Lua) просто запускает и останавливает эту отправку. Для отправки команд из приложения C# в QUIK лучше использовать примерно следующую конструкцию:Смотреть полностью...
Обмен данными между DLL (C/C++) и приложением C#
Автор записи: Дмитрий (Admin)
Для обмена данными между библиотекой DLL, написанной на языке C/C++ и приложением, написанном на языке C#, удобно и эффективно использовать Отображаемые в Памяти Файлы (MemoryMappedFile). По сути, это выделенный участок оперативной памяти компьютера (скорость!), который имеет свое уникальное имя и размер в байтах. Оба эти параметра задаются программистом. В дальнейшем можно, как читать из этой памяти, так и писать в нее, подключившись к ней в библиотеке DLL и в приложении C#.
Был проведен тест скорости обмена сообщениями, в тесте принимали участие следующие технологии: MemoryMappedFile, NamedPipes и Socket. Создавались по два отдельных приложения на C#, сервер и клиент, которые должны были обменяться друг с другом текстовыми сообщениями размером 120 символов 500 000 раз. На все это у них ушло следующее количество времени:
MemoryMappedFile: 1,5 секунды
NamedPipes: 12,5 секунд
Socket: 14 секунд
При этом, количество требуемого кода, так же, было меньше всего у MemoryMappedFile, по моему, выбор очевиден!
Пример создания и использования именованной памяти с именем "MyMemory" и размером 256 байт. В примере реализован следующий алгоритм:Смотреть полностью...
Как в Visual Studio создать новый проект на языке C# (.NET)
Автор записи: Дмитрий (Admin)(Если у Вас еще нет Visual Studio, то прочитайте в данной статье как ее бесплатно и абсолютно легально получить, установить и настроить для работы).
В Visual Studio есть 2 понятия: Решение и Проект. Можно воспринимать Решение как некую папку, в которой хранятся Проекты. В одном Решении может содержаться несколько Проектов, проекты могут быть на разных языках программирования.
По этой причине есть 2 способа создания нового Проекта:
- Вместе с созданием нового Решения.
- Добавить Проект в существующее Решение, это удобно, если Вы, например, пишите Торгового робота, или просто какую-то программу взаимодействующую с терминалом QUIK посредством библиотеки DLL. Тогда, разместив в одном решении проект библиотеки и проект приложения на C#, Вам будет удобно переключаться между файлами этих проектов для редактирования.
Взаимодействие Lua и библиотеки DLL, написанной на C/C++
Автор записи: Дмитрий (Admin)
Взаимодействие происходит по стандартному алгоритму: в скрипте QLua(Lua) вызываются функции из подключенной при помощи директивы "require" библиотеки DLL, написанной на языке C/C++ (о том как ее создать, можно прочитать в данной статье). В функцию можно передавать данные, в виде параметров. Обрабатывать их внутри функции и получать в скрипт результат(ы) выполнения функции.
Для этого служит Lua-стек, который представляет из себя массив разнотипных данных (таблицу Lua). Первое значение, помещенное в стек, получает индекс 1, второе - 2 и т.д.
Для каждого отдельного вызова функции автоматически используется отдельный стек!
Получить результаты можно обычным способом, и, если их несколько, используя параллельное присваивание.
Пример, если бы функция из приведенного примера DLL возвращала 4 значения:Смотреть полностью...
Коннектор DLL QUIK - QLua(Lua) - C++
Автор записи: Дмитрий (Admin)
Для Quik 8 x64 (Lua 5.1) скачать готовое решение VS 2019 Community можно по этой ссылке
Для Quik 8 x64 (Lua 5.3.5) скачать готовое решение VS 2019 Community можно по этой ссылке
Для того, чтобы обмениваться данными между скриптом Qlua и приложением на C# требуется библиотека DLL, написанная на языке C/C++. Для этого в Visual Studio нужно "Создать проект", выбрав язык C++ и тип проекта "Пустой проект". Создайте новую папку для проекта, если необходимо.Смотреть полностью...