Вечерняя сессия на срочном рынке теперь не доступна?
Пользователь
Сообщений: Регистрация: 21.02.2015
19.08.2025 08:45:49
Цитата
Zoya Skvorcova написал: , здравствуйте. Произошли изменения на биржи. Данные теперь транслируются только в разрезе текущего календарного дня. Информация об обезличенных сделках, собственных заявках и сделках транслируется только в тот календарный день, в который они были совершены.
Можно вернуть старый функционал. Получать сделки начиная с вечерней сессии, что логично. В выходные дни с вечерней сессии пятницы, суббота, воскресенье и понедельник.
Вечерняя сессия на срочном рынке теперь не доступна?
Пользователь
Сообщений: Регистрация: 21.02.2015
18.08.2025 18:11:42
Тиковые данные по инструментам срочного рынка за вечернюю сессию предыдущего дня в квике теперь не доступны? Можно ли вернуть этот функционал?
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Пользователь
Сообщений: Регистрация: 21.02.2015
30.12.2021 16:27:41
1 пример: 20211227,070000,157920.000000000,3,1925035068263251408,B 20211227,070000,157920.000000000,1,1925035068263251409,B 20211227,070000,157920.000000000,2,1925035068263251410,B 20211227,070000,157920.000000000,10,1925035068263251411,B 20211227,070000,157930.000000000,1,1925035068263251412,S 20211227,070000,157940.000000000,1,1925035068263251417,B 20211227,070000,157940.000000000,10,1925035068263251418,B 20211227,070000,157940.000000000,1,1925035068263251419,B 20211227,070000,157940.000000000,1,1925035068263251420,B 20211227,070000,157940.000000000,2,1925035068263251421,B 20211227,070000,157950.000000000,2,1925035068263251422,B Неверное направление в сделке 1925035068263251412. В квике бай, в финаме сел.
2 пример: 20211227,070000,158100.000000000,1,1925035068263251475,B 20211227,070000,158100.000000000,1,1925035068263251476,B 20211227,070000,158100.000000000,10,1925035068263251477,B 20211227,070000,158100.000000000,2,1925035068263251478,B 20211227,070000,158110.000000000,1,1925035068263251479,S 20211227,070000,158110.000000000,1,1925035068263251484,S 20211227,070000,158120.000000000,10,1925035068263251489,B 20211227,070000,158130.000000000,5,1925035068263251490,B 20211227,070000,158130.000000000,1,1925035068263251491,B 20211227,070000,158140.000000000,5,1925035068263251492,B 20211227,070000,158140.000000000,1,1925035068263251493,B 20211227,070000,158140.000000000,1,1925035068263251494,B 20211227,070000,158140.000000000,2,1925035068263251495,B 20211227,070000,158150.000000000,1,1925035068263251496,B Неверное направление в сделках 1925035068263251479, 1925035068263251484. В квике бай, в финаме селл И так далее.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Пользователь
Сообщений: Регистрация: 21.02.2015
30.12.2021 16:24:07
Цитата
Александр написал: Ни одного репорта не видел еще, не связанного со спредами. Набросьте парочку картинок с конкретными номерами сделок с неверным направлением, и чтобы видно было пару строк до и после, и я вам покажу кусок ордерлога вокруг них, 100% следом будет пара внебиржевых со спредами.
Берите приведенные файлы в первом сообщении файлы и сравнивайте в WinMerge финамовский файл и квиковский. Быстро увидите все разниличия. В файлах есть номера сделок.
Цитата
Anton написал: Это значит, что они только в мае заменили древний сервер на более новый, была такая проблемка довольно давно.
Я в тех поддержку финама 22 недели письма писал. Отвечали, что трудятся. В конце концов поправили этот глюк.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Пользователь
Сообщений: Регистрация: 21.02.2015
30.12.2021 09:03:54
До мая у финама время сделки (тика) было не корректным. Время округлялось на одну миллисекунду и в итоге получалось, что некоторые тики были в другой минуте.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Пользователь
Сообщений: Регистрация: 21.02.2015
30.12.2021 08:58:55
Это проблема наблюдается по всем фьючерсным контрактам (я проверял по основным).
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
написал: потом по предоставленным автором темы файлам понял, что расхождения весьма нечастые.
Тогда, возможно, это календарный спрэд. Тут обсуждалось:
Нет это не спред. Просто направление сделки разное. И возникает данная неприятность не на каждой сделке, но достаточно часто в общем объеме. По каким принципам возникает пока не понятно. Началось это где-то 7 недель назад (может чуть позже). 7 недель нужно было, чтобы инженеры финама начали заниматься задачей. И тут прямо озадачили :) До этого было все данные были идентичные у квика и финама.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Вынуждены повториться, нам не известно, как определяется направление на сделках в других местах. Это не исключает того момента, что в них оно может быть одинаковым (относительно друг друга).
Если у Вас есть сомнения в корректности отображаемой в терминале информации, рекомендуем обратиться в поддержку Вашего брокера и инициировать их обращения к нам для анализа ситуации.
Хорошо. Но я уже пытаюсь 7 недель выяснить у брокера в чем проблема :)
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
В текущей реализации, направление обезличенной сделки на срочном рынке в системе QUIK соответствует тому, что транслирует биржа . Как это направление определяется в любых других системах и сайтах, нам, к сожалению, не известно.
В Квике ошибка видимо? Раз it capital и финаме направление сделки одинаковое. А в квике другое. Вы уверены, что оно соотвествует тому, что транслирует биржа? Финам уверяет, что у них все в порядке.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Пользователь
Сообщений: Регистрация: 21.02.2015
28.12.2021 11:07:41
Собственно тема на сайте финама по данной проблеме: Хотелось бы услышать компетентное мнение разработчиков. Тики в отрытии и финаме совпадают. Получается направление сделки на срочном рынке в квике отображается некорректно?
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
Пользователь
Сообщений: Регистрация: 21.02.2015
28.12.2021 10:02:53
Архив тиковых данных по символу rih2 за 27-12-2021: Тики закачены: SPFB.RTS-3.22_211227_211227_finam.txt - с сайта финама SPFB.RTS-3.22_211227_211227_itcapital.txt - с it capital SPFB.RTS-3.22_211227_211227_quik.txt - квик (брокер финам) Видим, что направление сделки у квика некорректное. Сегодня от брокера финам получил следующее сообщение: Проблемы со стороны АО Финам не обнаружено и работа ведется с разработчиками системы Quik. У разработчиков системы Quik есть определенный алгоритм проставления направления сделок на основе биржевого потока данных. По данному вопросу еще ведется работа. Когда ждать исправления?
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
Пользователь
Сообщений: Регистрация: 21.02.2015
11.05.2021 10:21:37
Владимир, Прими таблетки и успокойся. Весь форум уже заспамил. Когда тебя уже забанят?
запуск из работающего скрипта другого скрипта или скриптов
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 15:23:15
Владимир,Ваше мнение очень важно для нас, но иди ты в ж...
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 14:14:33
Владимир,Вы по какой причине ко всем докапываетесь со своими "единственными верными", но бесполезными советами? Не нравится луа, пиши на си. Не нравится квик, уйди на другой терминал, терминалов много. Куда не глянь, в каждой теме успел засветится с одним и тем же по сути. Хотя глухому навряд ли можно все это объяснить. Человек, который утверждает, что не интересуется мной АБ-СО-ЛЮТ-НО, но при этом отвечает на мои сообщения, как минимум врун. Не интересуешься пройди мимо.
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 12:18:39
Владимир, Ваше мнение ценно, но не пошел бы ты на член.
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 11:25:55
Владимир, Твои слова расходятся с делом. Это не тебе ответ был.
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 11:07:13
Можно распаралелить работу скриптов, сделать коррутины и заморочиться обработкой данных.
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 11:02:25
Владимир,Правда в том, что ты болен. Это конечно тебя оскорбляет.
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 10:48:49
Цитата
Владимир написал: , Лапуль, я всегда спокоен. И на кнопки попадаю на те самые. Судя по обсуждению, в отличие от подавляющего большинства остальных участников форума. Ибо у меня ОДИН скрипт - к тому же, написанный на ЧИСТОМ Lua, а потому прекрасно работающий НА ВСЕХ (постоянно меняющихся) версиях софта.
Есть больные, которые ни когда не признаются, что они больные и откажутся принимать таблетки. P.S. Теперь все должны делать, как ты? Это же признак болезни, дед?
запуск из работающего скрипта другого скрипта или скриптов
Пользователь
Сообщений: Регистрация: 21.02.2015
08.02.2021 10:17:13
Владимир,Дед прими таблетки успокоительные. А то опять ножками том том, ручками шмяк шмяк. Не на те кнопки попадешь. :)
ParamRequest и getParamEx2, Как получить актуальные данные через getParamEx2?
Пользователь
Сообщений: Регистрация: 21.02.2015
20.01.2021 10:10:13
swerg,Потому что в роботе хотелось бы получать актуальные данные, т. к. робот используется для автоматизации.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
18.12.2020 10:28:10
Цитата
Andrey Bezrukov написал: С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
Решение, описанное выше, вполне подходит. Можно его сделать основным. Да сделайте.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
17.12.2020 13:23:09
Anton,За способ определения версии спасибо. Проверил, рабочий.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
17.12.2020 13:20:20
Anton,Ни во всех версиях квика в луа библиотеке есть luaI_getextraspace swerg, Первый способ: сделать 2 разные библиотеки для разных версий DLL. Второй способ: сохранить указатели для каждой версии Lua DLL (сделать struct с указателями). И в колбеках проверять, в какой версии Lua запущена библиотека и брать указатели (как вы и писали).
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Wow, под .NET на Delphi?! Мсье знает толк! :) Без обид, просто неожиданно очень было увидеть.
Delphi норм язык, быстрый с новыми фичами. С луа апи вообще огонь получается.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 22:38:30
swerg,Так оно не работает, если запустить два разных скрипта, но с одной DLL. У меня при этом остановка одного скрипта, останавливается второй скрипт. Частично в том, чтобы использовать openlib и каждый раз переименовывать библиотеку.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 22:27:23
Виталий, Вам дали путь решения вашей проблемы, а вы вместо задавания вопросов, начинаете выступать, так не буду, сяк не буду. У вас проблемы вы ее и решайте. Информации больше, чем достаточно. Вопрос заключается в том, чтобы вызвать из неуправляемой среды управляемый код? Луа и QLua тут не причем. Примерный путь решения описан так.
Код
unk := nil;
OleCheck(CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, unk));
FMetaHost := unk as ICLRMetaHost;
unk := nil;
OleCheck(FMetaHost.GetRuntime(PWideChar(AClrVer), IID_ICLRRuntimeInfo, unk));
FRuntimeInfo := unk as ICLRRuntimeInfo;
FRunTimeInfo.SetDefaultStartupFlags(GetLoaderFlags(ConcurrentGC, LoaderFlags), nil); //Установим загрузочные флаги
OleCheck(FRuntimeInfo.IsLoadable(isLoaded)); //Проверяем на загружена ли сборка
if not isLoaded then
raise EOleError.CreateFmt(ECRLNotLoaded, [AClrVer]);
unk := nil;
OleCheck(FRuntimeInfo.GetInterface(CLASS_CorRuntimeHost, IID_ICorRuntimeHost, unk));
FDefaultInterface := unk as ICorRuntimeHost;
FDefaultInterface.Start;
iDomain := iHost.DefaultAppDomain;
RawAssembly := LoadAssemble('TestCrl.dll'); //Загрузка сборки в VarArray
&type := iAssm.GetType_2(typeName); //Получаем тип класса
ov := &type.InvokeMember_3('ctor', BindingFlags_CreateInstance, nil, null, nil); //Создаем класс
if VarSupports(ov, ITest, test) then //Получаем интерфейс
test.ShowMessage('Hi World'); //Вызываем функцию интерфейса
....
//Обнуляем интерфейсы
Более ничем помочь не могу.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 21:56:51
Цитата
Владимир написал: , Лапуль, я уже говорил, что с раннего детства терпеть не могу распальцованных дураков. Гнутых пальцев я тут уже видел выше крыши, а программистов - полтора человека, и уж Вы никоим образом к ним не относитесь. Так что НЕ ВАМ что-то тут вякать про "пора менять работу". И говорил уже тыщу раз: задачи организации торговли настолько элементарны, что решаются ЛЮБЫМ способом. В частности, на чистом Lua, без всего этого маразма с обилием языков, библиотек, версий и прочей лабуды.
Прими таблетки, а то только можешь ногами стучать, да желчь испускать.
В луа 5.4 lua_version просто возращает версию луа 504 не зависимо от того, для какой версии LuaState. Но в целом можно попробовать пошаманить с этим делом.
Ниже вы приводите результаты ваших исследований, за них вам спасибо.
Засада с этим красивым автоматическим определением будет вот где. (предположим что в принципе оно у нас заработало и нам повезло - бинарно интерфейсы совпали) Если пользователь запустит одновременно два скрипта, использующих такую волшебную библиотеку - ему явно не повезёт. Потому что указатели на функции в Lua53.dll / Lua54.dll вы явно храните в глобальных переменных, т.е. в каждый момент времени в них фактически указатели на какую-то одну версию Lua. И даже если разнести указатели в 2 разные структуры по версиям Lua - то придётся в начало каждой интерфейсной функции вставлять хитрую проверку версии переданного стека, а потом еще хитро переключаться на соответствующую версию структуры указателей на функции Lua-API в рамках этой функции, вызванной внутри библиотеки.... Как-то это уже слишком, по-моему.
Я вас не понял. LuaState разный для версии Lua53 и Lua54, поэтому можно определить хаком версию луа. Я делаю такую проверку, если определяю, что у меня Lua53.dll и Lua54.dll одновременно находятся в памяти. У меня разные скрипты работают одновременно с разными версиями Lua. В целом способ рабочий, пока другого решения нет. Ждем ответа разработчиков.
написал: Я изучил структуры lua_State для луа 5.3 и 5.4 и они различны. Если поле status <> 0, то это lua5.3, иначе lua5.4.
Тоже в эту сторону смотрел, показалось ненадежным. Там есть еще одно интересное место, если уже привязываться к версии и немного хачить: к стейту прицеплена юзердата, сам квик по ней версию и определяет (несколько запутанным способом, я не понял, как именно). Получить можно с помощью экспортируемой luaI_getextraspace или (раз уж хачить) просто как ((char *)pstate) - 8, оно во всех версиях луа одинаково. А уж дальше порыться там.
Этот способ подходит только для определения версии 5.3 или 5.4. С луа 5.1 status = 0. Поэтому чисто ограничился этим. lua_getextraspace - опять же надо загружать какую-то из этих DLL, а вот LuaState разный для разных версий.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 19:03:11
Цитата
Владимир написал: У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua.
Тебе мамка сиську в детстве не давала? И теперь ты лезешь во все темы со своим мнением. Может другим способом задача автора не решается.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
написал: Фига себе! Александр , спасибо вам большое!!
Сложно это все, проще через CLRCreateInstance, ICLRMetaHost, ICLRRuntimeInfo, ICorRuntimeHost
Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Сейчас сделал загрузку сборки из квика на lua api данным способом. Все хорошо работает. Проверенно.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 12:14:08
Цитата
Владимир написал: , Тут всем пора менять работу - программисты вымерли. Логика на C++, интерфейс на C#, форум по Lua...
У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua. ::
Опять глюки начались, прими уже таблетки и успокойся.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 10:12:11
Получилось что-то такое, но не уверен, что верно:
Код
function FindLuaLibrary(LuaState: lua_State) : Boolean;
type
TLua_version_52 = function (L : lua_State) : Plua_Number; cdecl;
TLua_version_54 = function (L : lua_State) : lua_Number; cdecl;
PLuaState = ^TLuaState;
TLuaState = record
next: Pointer;
tt: Byte;
marked: Byte;
case byte of
53: (
nci53: Word;
);
54: (
status: byte;
allowhook: byte;
nci54: Word;
);
end;
function IsModuleLoaded(const ModuleName : String; var Handle : THandle) : Boolean;
begin
Handle := GetModuleHandle(PChar(ModuleName));
Result := Handle > 0;
end;
var Handle53 : THandle;
Handle54 : THandle;
version52: TLua_version_52;
version54: TLua_version_54;
begin
Result := IsModuleLoaded(LuaLibName53, Handle53) and
IsModuleLoaded(LuaLibName54, Handle54);
if not Result then
Exit;
try
if PLuaState(LuaState)^.status <> 0 then begin
//Проверим версию для lua5.3
version52 := GetProcAddress(Handle53, 'lua_version');
Result := (@version52 <> nil) and (version52(LuaState)^ = LUA_VERSION_NUM_53);
if Result then
LuaLibName := LuaLibName53;
end
else begin
//Проверим версию для Lua5.4
version54 := GetProcAddress(Handle54, 'lua_version');
Result := (@version54 <> nil) and (version54(LuaState) = LUA_VERSION_NUM_54);
if Result then
LuaLibName := LuaLibName54;
end;
except
Result := False;
end;
end;
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 10:08:56
Anton,Я изучил структуры lua_State для луа 5.3 и 5.4 и они различны. Если поле status <> 0, то это lua5.3, иначе lua5.4.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 09:43:03
Цитата
Александр написал: Там есть опечатки и битые ссылки, в той статье. Она Ваша?
Статья не моя, но я вдохновлялся подобной статьей.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
16.12.2020 09:42:34
Цитата
Виталий написал: Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Если вы у вас опыт работы 10+ лет и вы не можете связать 3 интерфейса, чтобы запустить сборку и вас забанили в гугле. То вам пора менять работу.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
15.12.2020 20:36:45
В общем накостылил, но вроде бы проблему решил. Но вопрос остался, хотелось бы услышать комментарии разработчиков.
Не подходит, т. к. в Lua 5.4 lua_version просто возвращает номер версии, а при передаче в luastate от Lua 5.4 в функцию lua_version от Lua 5.3 происходит ACCESS_VIOLATION.
А, ну и славно, вот и проверили, бинарно не совместимы версии.
Цитата
Еще варианты?
Я немного не понял: я вам чем-то обязан, что вы позволяете себе писать именно так? Я писал выше, вариант один: две разные dll для разных версий Lua. Как их загружать в скрипт при условии, что пользователь может выбрать одну из версий Lua - не знаю. Видимо раскладывать dll разных версий Lua по разным папкам и с путями в скрипте играться в зависимости __VERSION, или имена разные давать dll для разных версий Lua и опять же подгружать нужную библу.
Вы мне ничего не должны. Странно, что вы так на этот вопрос отреагировали. Это скорее вопрос к разработчикам. Нагородили кашу, пусть разбирают. Я уже поддержку lua53 и lua54 реализовал. Сейчас осталось понять какую версию lua dll подсовывать. Все это не решает вопрос, потому что не понятно, какую версию луа брать.
Чтобы использовать lua_version надо загрузить нужную dll. Возникает вопрос какую версию dll брать?
Вы не сделаете динамическую загрузку DLL нужной версии. Во-первых потому, что нет интерфейса для понимания того, на какой Lua-стек вам передали указатель, а во вторых потому, что вполне вероятно (но это надо дотошно проверять), что отдельные интерфейсные структуры в 5.3 и 5.4 версиях - разные. И в этом случае вы просто не сможете сделать бинарно совместимые версии dll. Вот и остаётся нам максимум - это проверить, что dll собрана под ту версию Lua, для которой она собрана. Фиговую какашку нам подсунули разработчки QUIK, да. Ведь фактически нельзя теперь просто положить dll в каталог с QUIK и использовать её спокойно, ведь в зависимости от версии Lua, заданной для скрипта, dll либо поедет, либо не поедет.... Да ужж...
Цитата
В луа 5.4 lua_version просто возращает версию луа 504 не зависимо от того, для какой версии LuaState.
Эту фразу не понял. Если вы скомпилировали вашу библиотеку (или динамически подгрузили) lua54.dll - то она вам и вернёт всегда 504 из lua_version. Т.к. эта функция просто возвращает вкомпилированную константу (см. исходники), на LuaState она не смотрит.
Я динамически подгружаю нужную luaxx.dll в зависимости от версии квика. У меня библиотека на все версии луа.
написал: При чем здесь _VERSION, я использую Lua Api?
При том, что вы можете прочитать значение глобальной переменной _VERSION.
Ну а дальше уже из серии "Давай я погуглю за тебя". Ну ок, мне тоже пригодится, так что 1:1.
1) lua_version(lua_State *L) 2) void luaL_checkversion_ -- вызывает luaL_error(), если версия не та, что требуется.
Не подходит, т. к. в Lua 5.4 lua_version просто возвращает номер версии, а при передаче в luastate от Lua 5.4 в функцию lua_version от Lua 5.3 происходит ACCESS_VIOLATION. Еще варианты?
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
15.12.2020 14:18:05
Кстати реализация ExportDLL моя собственная.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
15.12.2020 14:17:30
Цитата
swerg написал: Фига себе! Александр , спасибо вам большое!!
Сложно это все, проще через CLRCreateInstance, ICLRMetaHost, ICLRRuntimeInfo, ICorRuntimeHost
написал: При чем здесь _VERSION, я использую Lua Api?
При том, что вы можете прочитать значение глобальной переменной _VERSION.
Ну а дальше уже из серии "Давай я погуглю за тебя". Ну ок, мне тоже пригодится, так что 1:1.
1) lua_version(lua_State *L) 2) void luaL_checkversion_ -- вызывает luaL_error(), если версия не та, что требуется.
Чтобы использовать lua_version надо загрузить нужную dll. Возникает вопрос какую версию dll брать? В луа 5.4 lua_version просто возращает версию луа 504 не зависимо от того, для какой версии LuaState. Но в целом можно попробовать пошаманить с этим делом.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
Пользователь
Сообщений: Регистрация: 21.02.2015
15.12.2020 13:11:29
Тут читать ExportDLL брать тут
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
написал: И что не так? В этой либе мне нужно использовать CLR, там будут формы. Как сам факт поддержки CLR (без каких-либо вызовов) влияет на выгрузку библиотеки?
Как минимум - вот оно коренное отличие вашей DLL от моей, а вовсе не версия QUIK. Ну и видимо передавайте привет .NET и особенностям ее работы.
Цитата
написал: (без каких-либо вызовов) влияет на выгрузку библиотеки?
Вы может и не вызываете, но раз хотите .NET - оно там очень могуче напрягается, чтобы вам его предоставить. Вам наверное будет не сложно пока отключить использование .NET и проверить.
Пока не сложно. Проверил. Без NET выгружается. Другой вопрос: как обеспечить выгрузку с NET, не знаете? Полагаю, спрашивать разрабов квика бесполезно про это...
Способов подключения сборок на си++ как минимум 2: 1. это использовать управляемый код. 2. Использовать интерфейсы и самостоятельно загружать сборки. Тот и другой способ гуглится. Но возможно стоит начать вот CoInitializeEx и CoUninitialize. Но я бы советовал сделать отдельное приложение на .net и передавать туда данные, например по сети.
Не, приложение с передачей данных это такое себе. Это как C# приложение с коннектором C++ - древняя тема и такая же нестабильная. Я пробовал ее году в 2015 еще, че-то не зашло. Я тогда ушел на LUA чистый и его хватало. Сейчас появилась потребность в более нормальном языке, чем LUA и я нашел вариант с подключением библиотеки. Я продолжил бы писать на C# (его знаю, а С++ нет), но проблема в том, что на шарпе нет нормального способа сделать либу. Есть какой-то полукостыльный и он мне не понравился и результат сомнительный. Интерфейсы на чистом Win API тоже не осилил как-то. Вот прикрутил CLR, но оно вон че оказалось. Буду еще смотреть, что дальше делать, но куча посредников между биржей и моим алгоритмом - это печаль и зло. Хочу поменьше, чтоб стабильнее и быстрее было.
Сделай секцию экспорта в C# библиотеке: сначала дезасемблировать, потом прописывать флаги и секции. Я специально программу написал, которая такое делает. И можно использовать LoadLibrary на стороне луа и все другие вкусняшки.
Вообще не понял. Как я читал, у C# проблема с экспортом функций и чтобы они были доступны - нужно ставить какую-то приблуду, которая работает только в английской локали. Ты про это или про что-то другое говоришь?
В С# проблема с экспортом функций в том, что MS не хочет ее реализовывать. Практических проблем нет. Ставить приблуду не обязательно. Надо: 1. ildasm.exe декомпилировать код. 2. В тексте кода найти все нужные функции и вставить .export[{номер функции}]. Можно использовать ObfuscationAttribute для определения нужных функций. 3. ilasm.exe скопилировать код в бинарник. В 64 битном режиме поправить установить флаг .corflags 0x00000002 Утилиту которая такое делает можно написать за один вечер. Читай книгу Serge Lidin ".Net IL Assembler"
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 21.02.2015
15.12.2020 12:27:37
Вопрос получается следующим, как в luaopen_Название определить в какой версии запустился скрипт?
написал: Как понять в каком окружении запущен скрипт?
_VERSION
При чем здесь _VERSION, я использую Lua Api? При загрузке у меня есть только LuaState и мне нужно подключиться к нужной dll (lua53.dll или lua54.dll), при этом обе dll загружены в память.