Господа, я с горем пополам выучил Луа. Но его возможностей мне уже не хватает, так как накапливаю большие объёмы данных и обрабатываю их. Теперь начал с горем пополам учить С++. Не могу понять как написать простейший dll-файл под КВИК. Например, файл принимает данные текущей таблицы по инструменту SBER (колбек OnParam). Подскажите пожалуйста. Премного благодарен. Прошу простить за тупенькие вопросы.
Let_it_go написал: Не могу понять как написать простейший dll-файл под КВИК. Например, файл принимает данные текущей таблицы по инструменту SBER (колбек OnParam).
Вот вам простой пример QLua скрипта, который обрабатывает OnParam, и DLL с одной функцией, которая считает спред.
Файл myprog.lua:
Код
local mylib = require "mylib"
local fRun = true
function OnParam(class_code, sec_code)
if class_code =="TQBR" and sec_code == "SBER" then
local bid = getParamEx(class_code, sec_code, "BID")
local offer = getParamEx(class_code, sec_code, "OFFER")
if bid.result == "1" and offer.result == "1" then
message("mylib.spread = "..mylib.spread(tonumber(bid.param_value), tonumber(offer.param_value)))
end
end
end
function main()
while fRun do
sleep(1000)
end
end
function OnStop(s)
fRun = false
end
Файл mylib.c (или mylib.cpp), компилируется как код Си или Си++, без разницы:
Да, с помощью указания соответствующей опции компилятору. Вижу у Вас MinGW, так что, полагаю, сборка производится с помощью gcc. Для gcc указать дополнительные директории для поиска заголовочных файлов можно с помощью опции -I gcc ... -I "C:\Program Files (x86)\Lua\5.1\include" ...
Code::Blocks уже давно не пользовался, но наверняка там можно найти отвечающий за это пункт меню. Что-нибудь типа "Include Directories". Забегая вперёд: дополнительные директории для поиска библиотечных файлов для линковки можно задать и линкеру (т.е. компоновщику).
Let_it_go написал: Я качал эти файлы с сайта lua.org и кидал в папку где лежит моя программа для Си++. CodeBlocks называется.
Судя по вашим словам их можно было не кидать в эту папку, а подключить как то иначе?
Так у вас ничего не получится. У разных компиляторов различный формат библиотечных LIB файлов. Насколько я вижу вы поставили себе «Lua for Windows», которая собрана на MSVC и в комплекте у неё .lib файлы для MSVC. А в качестве среды вы установили себе CodeBlocks с MinGW и компилятором GCC, у которого свой формат LIB файлов с расширением .a. Вы не сможете откомпилировать и слинковать свой проект с такой связкой.
У вас три возможности по CodeBlocks: • Либо настройте CodeBlocks на использование MSVC компилятора, приблизительно как это описано здесь: CodeBlocks_MSVC_setup.pdf • Либо скачайте библиотеки Lua под MinGW отсюда: lua-5.1.5_Win32_dllw4_lib.zip (или отсюда lua-5.1.4-4-mingw32-dev.tar.xz) и дальше пытайтесь слинковаться с ними, если там версии совпадут или не будет ещё какой засады. • Либо скачайте исходники Lua 5.1.5 и соберите из них свой проект и библиотеки под свою версию компилятора в CodeBlocks.
Но мой вам совет, не усложняйте себе жизнь, бросьте вы этот CodeBlocks, поставьте себе MSVC и работайте спокойно.
Suntor написал: Но мой вам совет, не усложняйте себе жизнь, бросьте вы этот CodeBlocks, поставьте себе MSVC и работайте спокойно.
1. у С++ - кодера не может быть спокойной жизни по определению. 2. чем больше разносторонней инфы, тем пушистей извилины. 3. на вантузе мир клином не сошелся, особенно в РФ. ткчт всг, бро :)
rinat написал: 1. у С++ - кодера не может быть спокойной жизни по определению.
Это да... поэтому в другой ветке писал, что начинать надо с чистого Си.
Цитата
rinat написал: 2. чем больше разносторонней инфы, тем пушистей извилины.
Но не для новичка... человек только осваивает язык, а щас зароется MinGW и прочую лабудень настраивать... он возненавидит этот Си/Си++ ещё даже не начав... оно надо?
Цитата
rinat написал: 3. на вантузе мир клином не сошелся, особенно в РФ.
Есть хорошее правило, пиши на родных для системы инструментах... человек будет под Quik писать DLL, зачем ему MinGW и GCC? не хочется ругаться, поэтому не буду, но вы поняли...
Suntor написал: Это да... поэтому в другой ветке писал, что начинать надо с чистого Си.
обучал недавно младшеклассника и оказалось, что таки нет - лучше начинать именно с С++: 1. простая схема ввода-вывода 2. строки искаропки 3. классы удобно от простого к нужному- далее java и ведроид. 4. обработка исключений аналогично классам - на пальцах и по полочкам
ключевое на старте - минимум букаф - максимум понимания, имо. работает очень хорошо.
Цитата
Suntor написал: щас зароется MinGW и прочую лабудень настраивать
да, но причина не в этом, а в непроектном подходе к решению задачи.
возможно ему dll в таком виде и не нужно ... :) кто сказал, что нужно всё тащить в луа-машину? может брать данные, юзать их снаружи и выполнять как внешнюю транзакцию: - модульная масштабируемая и кастомизирумая структура, ключевое слово - структура - разделение на дата-екзекушн -более, чем логично - исключение gui - как в принципе самой тормозной и ненадежной части - перспектива на прямое/другое подключение результата усилий
в итоге: писать надо не под систему или КВИК, а ставить задачи и подбирать системным образом оптимальные инструменты
Цитата
Suntor написал: не хочется ругаться, поэтому не буду
и не нужно, тк по сути верно предложен неправильный принцип 1. полный нуб не должен сразу писать длл 2. двигаться надо от простого к сложному - как можно дольше и дальше ИЗБЕГАЯ ЛЮБЫХ IDE 3. g++ отлично подходит для начального использования в любой среде, даже на венде, но см п.2 4. ТС-у читать максимально простые книжки/учебники и потом Страуструпа, искать how to compile & build суета - зло, имо :)
возможно ему dll в таком виде и не нужно ... :) кто сказал, что нужно всё тащить в луа-машину? может брать данные, юзать их снаружи и выполнять как внешнюю транзакцию: - модульная масштабируемая и кастомизирумая структура, ключевое слово - структура - разделение на дата-екзекушн -более, чем логично - исключение gui - как в принципе самой тормозной и ненадежной части - перспектива на прямое/другое подключение результата усилий
уточните пожалуйста о чём речь. Вы имеете в виду, что не покидая языка Луа, можно по особому написать код (на Луа), чтобы он был быстрым? что значит "брать данные, юзать их снаружи и выполнять как внешнюю транзакцию "?
Let_it_go написал: не покидая языка Луа, можно по особому написать код (на Луа),
вполне странно такое слышать в теме "пример dll" речь идет о том, что коль скоро решено использовать С/С++ в виде доп. длл, то мало логики это всё пытаться впихнуть в луа-машину.
и такой вопрос сразу провоцирует на ответ в неприятной форме: оставте тему языков и покидания чего-либо в сторонку и начните с начала ... а именно, часто задачу участника фин. рынка можно разделить на подзадачи: 1. получение данных с контролем соединения 2. контроль целостности данных 3. буферизация данных для текущего анализа 4. сохранение данных в базу - варьируется по необходимости 5. анализ буфера нарастающим итогом и торговая логика 6. формирование торговых приказов 7. контроль за прохождением и исполнением заявок
для 1 Вы используете Луа для 2-6 Вы можете делать используя любой язык программирования для 7 доступны trans2quik
на скорость обработки данных влияет способ и структура их хранения, количество преобразований типов и логика парсинга н-р: возможно быстрее будет посимвольный парсинг текстовых/числовых данных полученных из КВИК на рам-диске без преобразования таймштампа, а хранить в бинарной структуре для более неторопливого майнинга
если не готовы использовать trans2quik, то вполне нетрудно возвращать результат по 2-6 в луа-скрипт, либо использовать импорт транзакций через tri
rinat написал: обучал недавно младшеклассника и оказалось, что таки нет - лучше начинать именно с С++:
Это потому, что вы его учили языку программирования, а не самому программированию как таковому... А это суть две большие разницы. Использование высокоуровневых языков и их абстракций действительно сокращает код и ускоряет процесс написания программ, но к сожалению, за этими конструкциями «леса не видно»... Уж не вспомню сейчас название, но в одной из серьёзных западных компаний даже тест при приёме на работу был такой, человеку давали простые задачи, которые он успешно решал на том же Си++, а потом во второй части собеседования просили объяснить, что делают его программы на железном уровне. Как оказывается большинство вполне неплохих программистов неспособны объяснить и не понимают, во что превращаются их программы после компиляции.
Цитата
rinat написал: возможно ему dll в таком виде и не нужно ... :)
Именно такая и нужна, собственно это и есть тема данной ветки.
Цитата
rinat написал: в итоге: писать надо не под систему или КВИК, а ставить задачи и подбирать системным образом оптимальные инструменты
Если вы не заметили, то находитесь на форуме Quik... ))) Да и предыдущие темы не читали скорее всего. Человеку эта DLL нужна чтобы вынести тяжёлые вычисления из его Lua скрипта. Вполне чёткая задача, ради которой он вообще начал это «обучение». И та задача, которую ему нужно сделать, требует минимум использования базовой математики из обычного Си, плюс добавить шаблон DLL к этому, который я кинул вначале. Никакие Си++, классы, исключения и т.п. ему не нужны... Это тоже самое, что человека пришедшего попросить молоток, чтобы забить гвоздь, послали в техникум учиться на 5 лет, со словами «сначала диплом принеси, а потом молоток получишь».
Suntor написал: что делают его программы на железном уровне
обучал недавно младшеклассника
спор ради спора или реально не вдумались? :)
Цитата
Suntor написал: Если вы не заметили, то находитесь на форуме Quik... )))
не вижу тут чего-то странного, квик - грамотная поделка, дык почему бы не накинуть на вентилятор? :)
Цитата
Suntor написал: предыдущие темы не читали скорее всего.
не читал, но и не говорю ничего слишком узкоспецифичного вроде
Цитата
Suntor написал: эта DLL нужна чтобы вынести тяжёлые вычисления из его Lua скрипта.
именно. именно необходимость такого подхода и вызывает максимальные сомнения ... исходя из общего перечня задач типового участника
Цитата
Suntor написал: человека пришедшего попросить молоток, чтобы забить гвоздь, послали в техникум учиться на 5 лет, со словами «сначала диплом принеси, а потом молоток получишь».
а вот это кстати только так и правильно ибо и молоток сломает и сам убьется :)
и...и это таки форум и никто тут команд не раздает, пусть слушает и что-то понимает или не понимает результат мне не болит ... :)
Suntor написал: что делают его программы на железном уровне
обучал недавно младшеклассника
спор ради спора или реально не вдумались? :)
я тоже был когда-то младшеклассником... и помню чему меня учили... стек, куча, мантисса, сортировки, деревья, Дональд Кнут был настольной книгой, свою первую программу вообще в машинных кодах писал... видимо я совсем от жизни отстал, и современных школьников учат только делать cout <<... я это могу понять, но согласиться с этим, никак...
Цитата
rinat написал: не читал, но и не говорю ничего слишком узкоспецифичного вроде
вы просто посылаете человека в увлекательное путешествие получать «больше разносторонней инфы»... и моё мнение, что это в данном случае просто усложнит человеку жизнь, и пойдя по этому пути он может в итоге не добраться до пункта назначения в приемлемые сроки
Цитата
rinat написал: именно. именно необходимость такого подхода и вызывает максимальные сомнения ...
предложите свой... и можно будет сравнить, обсудить плюсы и минусы...
Цитата
rinat написал: а вот это кстати только так и правильно ибо и молоток сломает и сам убьется :)
нет, я не согласен... вы когда в первый раз в руки молоток взяли у вас был к этому времени диплом?... )))
Suntor написал: младшеклассником... и помню чему меня учили... стек, куча, мантисса, сортировки, деревья
в третьем классе? в 9 лет? Вы -гений? :)
Цитата
Suntor написал: и моё мнение, что это в данном случае просто усложнит человеку жизнь
как-то мне кажется, что финансовый рынок - это не то место, где надо искать легкой жизни, причем весь вопрос именно во времени - не суетиться и системно развиваться, понимая где находишься и куда идешь :)
Цитата
Suntor написал: и можно будет сравнить, обсудить плюсы и минусы
выше писал форумные лозунги с пунктами, реализация - дело интимное :)
Цитата
Suntor написал: когда в первый раз в руки молоток взяли у вас был к этому времени диплом
дилетантизм и верхоглядство - бичь нашей современной реальности.
rinat написал: в третьем классе? в 9 лет? Вы -гений? :)
«в начальных, но точно не помню», «до 10 лет, не старше», «нет»
Цитата
rinat написал: как-то мне кажется, что финансовый рынок - это не то место, где надо искать легкой жизни
это уже философия... а речь о приземлённой конкретной задаче
Цитата
rinat написал: выше писал форумные лозунги с пунктами, реализация - дело интимное :)
в том то и дело, что это лишь общие наставления были... вы конкретно объясните человеку, каким способом он должен решить свою задачу и сколько времени потребуется на это
Цитата
rinat написал: дилетантизм и верхоглядство - бичь нашей современной реальности.
опять философия... то-бишь попытка уйти от ответа на прямой вопрос: Что первое было у вас в руках по жизни: молоток или диплом? )))
P.S. Предлагаю свернуть полемику или перенести её в раздел «Обмен опытом»... а то мы тут сейчас всю ветку за... своим разговором, не имеющим дело к теме.
Let_it_go написал: Visual Studio C++ очень тяжёлый. JetBrains CLIon подойдёт? --- В Code Blocks можно выбирать разные компиляторы. Разве это не то что нужно?
CLion -- платная.
Студия -- де-факто стандарт IDE для разработки на плюсах под винду. Ставьте бесплатную Community Edition -- хватит за глаза.Ну, и Ваш скрин от Code::Blocks позволяет предположить, что собирать в ней можно любым из предложенных инструментов. Теперь разве что осталось посмотреть, как там в принципе настроить доп. директории для компилятора и линкера и всё -- можно собирать без замусоривания стандартной директории библиотечными файлами.
Let_it_go написал: В Code Blocks можно выбирать разные компиляторы. Разве это не то что нужно?
Это выбор внутренней конфигурации под требуемый компилятор, но саму конфигурацию нужно ещё настраивать и сам компилятор отдельно устанавливать... выше я кинул уже ссылку на PDF, где описано, как это делать.
Let_it_go написал: Suntor пытаюсь запусить ваш код dll в Visual Studio 2017 Community Такая ошибка возникает при нажатии на "собрать решение". Спасибо за помощь.
Let_it_go написал: Suntor пытаюсь запусить ваш код dll в Visual Studio 2017 Community Такая ошибка возникает при нажатии на "собрать решение". Спасибо за помощь.
У вас включена опция использования предварительно скомпилированных файлов заголовков. Её надо отключить. У меня нет под рукой студии такой же версии, поэтому не могу вам сходу указать, где эта опция отключается. Ищите по названию «Precompiled headers»... в старой VS6.0 это выглядит так:
Поставил Visual Studio Community пытаюсь скомпилировать dll в примере Suntor --- Файлы заголовков включил
--- но он выдаёт такие ошибки 1>------ Сборка начата: проект: easy_c, Конфигурация: Release Win32 ------ 1>easy_c.cpp 1>d:\_c++\easy_c\easy_c\easy_c.cpp(41): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник. 1>Сборка проекта "easy_c.vcxproj" завершена с ошибкой. ========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========