Александр (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
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. В квике бай, в финаме селл
И так далее.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Цитата
Александр написал:
Ни одного репорта не видел еще, не связанного со спредами. Набросьте парочку картинок с конкретными номерами сделок с неверным направлением, и чтобы видно было пару строк до и после, и я вам покажу кусок ордерлога вокруг них, 100% следом будет пара внебиржевых со спредами.
Берите приведенные файлы в первом сообщении файлы и сравнивайте в WinMerge финамовский файл и квиковский. Быстро увидите все разниличия. В файлах есть номера сделок.
Цитата
Anton написал:
Это значит, что они только в мае заменили древний сервер на более новый, была такая проблемка довольно давно.
Я в тех поддержку финама 22 недели письма писал. Отвечали, что трудятся. В конце концов поправили этот глюк. :lol:  
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
До мая у финама время сделки (тика) было не корректным. Время округлялось на одну миллисекунду и в итоге получалось, что некоторые тики были в другой минуте.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Это проблема наблюдается по всем фьючерсным контрактам (я проверял по основным).
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Цитата
Старатель написал:
Цитата
_sk_ написал:
потом по предоставленным автором темы файлам понял, что расхождения весьма нечастые.
Тогда, возможно, это календарный спрэд. Тут обсуждалось:
https://forum.quik.ru/messages/forum10/message53683/topic6327/#message53683
Нет это не спред. Просто направление сделки разное. И возникает данная неприятность не на каждой сделке, но достаточно часто в общем объеме. По каким принципам возникает пока не понятно.
Началось это где-то 7 недель назад (может чуть позже). 7 недель нужно было, чтобы инженеры финама начали заниматься задачей. И тут прямо озадачили :)
До этого было все данные были идентичные у квика и финама.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Цитата
Roman Azarov написал:
Александр,

Вынуждены повториться, нам не известно, как определяется направление на сделках в других местах.
Это не исключает того момента, что в них оно может быть одинаковым (относительно друг друга).

Если у Вас есть сомнения в корректности отображаемой в терминале информации, рекомендуем обратиться в поддержку Вашего брокера и инициировать их обращения к нам для анализа ситуации.
Хорошо. Но я уже пытаюсь 7 недель выяснить у брокера в чем проблема :)
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Цитата
Roman Azarov написал:
Александр, добрый день!

В текущей реализации, направление обезличенной сделки на срочном рынке в системе QUIK соответствует тому, что  транслирует биржа .
Как это направление определяется в любых других системах и сайтах, нам, к сожалению, не известно.
В Квике ошибка видимо? Раз it capital и финаме направление сделки одинаковое. А в квике другое. Вы уверены, что оно соотвествует тому, что транслирует биржа?
Финам уверяет, что у них все в порядке.
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Собственно тема на сайте финама по данной проблеме: https://forum.finam.ru/posts/t111329-Problema-s-tikovymi-kotirovkami
Хотелось бы услышать компетентное мнение разработчиков.
Тики в отрытии и финаме совпадают. Получается направление сделки на срочном рынке в квике отображается некорректно?
Квик выдает не правильное направление сделки в таблице всех сделок на срочном рынке
 
Архив тиковых данных по символу rih2 за 27-12-2021: https://disk.yandex.ru/d/iVFqIlljV194hA
Тики закачены:
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
 
Владимир, Прими таблетки и успокойся. Весь форум уже заспамил. Когда тебя уже забанят?
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир,Ваше мнение важно для нас, но иди в ж...
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир,Ваше мнение очень важно для нас, но иди ты в ж...
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир,Вы по какой причине ко всем докапываетесь со своими "единственными верными", но бесполезными советами? Не нравится луа, пиши на си. Не нравится квик, уйди на другой терминал, терминалов много. Куда не глянь, в каждой теме успел засветится с одним и тем же по сути. Хотя глухому навряд ли можно все это объяснить.
Человек, который утверждает, что не интересуется мной АБ-СО-ЛЮТ-НО, но при этом отвечает на мои сообщения, как минимум врун. Не интересуешься пройди мимо.
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир, Ваше мнение ценно, но не пошел бы ты на член.
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир, Твои слова расходятся с делом.
Это не тебе ответ был.
запуск из работающего скрипта другого скрипта или скриптов
 
Можно распаралелить работу скриптов, сделать коррутины и заморочиться обработкой данных.
https://www.lua.org/pil/9.1.html
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир,Правда в том, что ты болен. Это конечно тебя оскорбляет.
запуск из работающего скрипта другого скрипта или скриптов
 
Цитата
Владимир написал:
Александр, Лапуль, я всегда спокоен. И на кнопки попадаю на те самые. Судя по обсуждению, в отличие от подавляющего большинства остальных участников форума. Ибо у меня ОДИН скрипт - к тому же, написанный на ЧИСТОМ Lua, а потому прекрасно работающий НА ВСЕХ (постоянно меняющихся) версиях софта.  
Есть больные, которые ни когда не признаются, что они больные и откажутся принимать таблетки.

P.S. Теперь все должны делать, как ты? Это же признак болезни, дед?
запуск из работающего скрипта другого скрипта или скриптов
 
Владимир,Дед прими таблетки успокоительные. А то опять ножками том том, ручками шмяк шмяк. Не на те кнопки попадешь. :)
ParamRequest и getParamEx2, Как получить актуальные данные через getParamEx2?
 
swerg,Потому что в роботе хотелось бы получать актуальные данные, т. к. робот используется для автоматизации.
Отладка QUIK 8.11
 
Цитата
Andrey Bezrukov написал:
С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
Решение, описанное выше, вполне подходит. Можно его сделать основным. Да сделайте.
Отладка QUIK 8.11
 
Anton,За способ определения версии спасибо. Проверил, рабочий.
Отладка QUIK 8.11
 
Anton,Ни во всех версиях квика в луа библиотеке есть luaI_getextraspace
swerg, Первый способ: сделать 2 разные библиотеки для разных версий DLL.
Второй способ: сохранить указатели для каждой версии Lua DLL (сделать struct с указателями).
И в колбеках проверять, в какой версии Lua запущена библиотека и брать указатели (как вы и писали).
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
swerg написал:
Цитата
Александр
 
Код
      unk :  =     nil  ;
  OleCheck(CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, unk));
  FMetaHost :  =   unk as ICLRMetaHost;
    

Wow, под .NET на Delphi?! Мсье знает толк! :)
Без обид, просто неожиданно очень было увидеть.
Delphi норм язык, быстрый с новыми фичами. С луа апи вообще огонь получается.
Отладка QUIK 8.11
 
swerg,Так оно не работает, если запустить два разных скрипта, но с одной DLL.
У меня при этом остановка одного скрипта, останавливается второй скрипт.
Частично в том, чтобы использовать openlib и каждый раз переименовывать библиотеку.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Виталий,
Вам дали путь решения вашей проблемы, а вы вместо задавания вопросов, начинаете выступать, так не буду, сяк не буду. У вас проблемы вы ее и решайте. Информации больше, чем достаточно. Вопрос заключается в том, чтобы вызвать из неуправляемой среды управляемый код? Луа и 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 при завершении скрипта
 
Цитата
Владимир написал:
Александр, Лапуль, я уже говорил, что с раннего детства терпеть не могу распальцованных дураков. Гнутых пальцев я тут уже видел выше крыши, а программистов - полтора человека, и уж Вы никоим образом к ним не относитесь. Так что НЕ ВАМ что-то тут вякать про "пора менять работу".   И говорил уже тыщу раз: задачи организации торговли настолько элементарны, что решаются ЛЮБЫМ способом. В частности, на чистом Lua, без всего этого маразма с обилием языков, библиотек, версий и прочей лабуды.
Прими таблетки, а то только можешь ногами стучать, да желчь испускать.
Отладка QUIK 8.11
 
Цитата
swerg написал:
Цитата
Александр В луа 5.4 lua_version просто возращает версию луа 504 не зависимо от того, для какой версии LuaState.
Но в целом можно попробовать пошаманить с этим делом.

Ниже вы приводите результаты ваших исследований, за них вам спасибо.

Засада с этим красивым автоматическим определением будет вот где. (предположим что в принципе оно у нас заработало и нам повезло - бинарно интерфейсы совпали)
Если пользователь запустит одновременно два скрипта, использующих такую волшебную библиотеку - ему явно не повезёт.
Потому что указатели на функции в Lua53.dll / Lua54.dll вы явно храните в глобальных переменных, т.е. в каждый момент времени в них фактически указатели на какую-то одну версию Lua.
И даже если разнести указатели в 2 разные структуры по версиям Lua - то придётся в начало каждой интерфейсной функции вставлять хитрую проверку версии переданного стека, а потом еще хитро переключаться на соответствующую версию структуры указателей на функции Lua-API в рамках этой функции, вызванной внутри библиотеки....
Как-то это уже слишком, по-моему.
Я вас не понял. LuaState разный для версии Lua53 и Lua54, поэтому можно определить хаком версию луа. Я делаю такую проверку, если определяю, что у меня Lua53.dll и Lua54.dll одновременно находятся в памяти.
У меня разные скрипты работают одновременно с разными версиями Lua. В целом способ рабочий, пока другого решения нет. Ждем ответа разработчиков.
Отладка QUIK 8.11
 
Цитата
Anton написал:
Цитата
Александр написал:
Я изучил структуры 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 при завершении скрипта
 
Цитата
Владимир написал:
У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua.    
Тебе мамка сиську в детстве не давала? И теперь ты лезешь во все темы  со своим мнением. Может другим способом задача автора не  решается.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Виталий написал:
Цитата
Александр написал:
 
Цитата
swerg  написал:
Фига себе!
Александр , спасибо вам большое!!
 Сложно это все, проще через CLRCreateInstance, ICLRMetaHost, ICLRRuntimeInfo, ICorRuntimeHost
Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Сейчас сделал загрузку сборки из квика на lua api данным способом. Все хорошо работает. Проверенно.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Владимир написал:
Александр,  Тут всем пора менять работу - программисты вымерли. Логика на C++, интерфейс на C#, форум по Lua...

У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua. ::  
Опять глюки начались, прими уже таблетки и успокойся.
Отладка QUIK 8.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
 
Anton,Я изучил структуры lua_State для луа 5.3 и 5.4 и они различны. Если поле status <> 0, то это lua5.3, иначе lua5.4.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Александр написал:
Там есть опечатки и битые ссылки, в той статье. Она Ваша?
Статья не моя, но я вдохновлялся подобной статьей.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Виталий написал:
Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Если вы у вас опыт работы 10+ лет и вы не можете связать 3 интерфейса, чтобы запустить сборку и вас забанили в гугле.
То вам пора менять работу.
Отладка QUIK 8.11
 
В общем накостылил, но вроде бы проблему решил.
Но вопрос остался, хотелось бы услышать комментарии разработчиков. :lol:  
Отладка QUIK 8.11
 
Цитата
swerg написал:
Цитата
АлександрНе подходит, т. к. в 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 подсовывать.
Все это не решает вопрос, потому что не понятно, какую версию луа брать.
Отладка QUIK 8.11
 
Цитата
swerg написал:
Цитата
Чтобы использовать 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 в зависимости от версии квика. У меня библиотека на все версии луа.
Отладка QUIK 8.11
 
Цитата
swerg написал:
Цитата
Александр написал:
При чем здесь _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 при завершении скрипта
 
Кстати реализация ExportDLL моя собственная.
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
swerg написал:
Фига себе!
Александр , спасибо вам большое!!
Сложно это все, проще через CLRCreateInstance, ICLRMetaHost, ICLRRuntimeInfo, ICorRuntimeHost
Отладка QUIK 8.11
 
Цитата
swerg написал:
Цитата
Александр написал:
При чем здесь _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 при завершении скрипта
 
Тут читать https://miac.volmed.org.ru/wiki/index.php/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D­0%...
ExportDLL брать тут https://yadi.sk/d/qAlXi-OnjniSt
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Виталий написал:
Цитата
Александр написал:
 
Цитата
Виталий  написал:
 
Цитата
 Александр   написал:
   
Цитата
  Виталий    написал:
   
Цитата
   swerg     написал:
     
Цитата
    Виталий      написал:
И что не так? В этой либе мне нужно использовать 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
 
Вопрос получается следующим, как в luaopen_Название определить в какой версии запустился скрипт?
Отладка QUIK 8.11
 
Цитата
TGB написал:
Цитата
Александр написал:
Как понять в каком окружении запущен скрипт?

 В кнопке запуска скриптов есть список, в котором можно указать версию Lua/
Как мне сделать на lua api?
Отладка QUIK 8.11
 
Цитата
Старатель написал:
Цитата
Александр написал:
Как понять в каком окружении запущен скрипт?
_VERSION
При чем здесь _VERSION, я использую Lua Api? При загрузке у меня есть только LuaState и мне нужно подключиться к нужной dll (lua53.dll или lua54.dll), при этом обе dll загружены в память.
Отладка QUIK 8.11
 
Обе версии библиотеки lua53.dll и lua54.dll находятся в памяти. Как понять в каком окружении запущен скрипт?
Отладка QUIK 8.11
 
Вопрос к разработчикам, как понять в Lua Api в какой версии lua запущен скрипт и к какой версии библиотеки подключаться?
Страницы: 1 2 3 4 5 След.
Наверх