elelel / qluacpp-tutorial

Tutorial for Qluacpp library (C++ interface for Quik trading terminal)
28 stars 13 forks source link

Имена .dll и соответствующего запускающего .lua скрипта обязаны быть разными #16

Open Arech opened 5 years ago

Arech commented 5 years ago

Добавьте, пожалуйста, куда-нить в описание ограничение из заголовка.

Сегодня полдня убил, пытаясь понять, почему квик не хочет запускать мою либину с ошибкой про "loop or previous error loading module". Оказалось, что субж...

Возможно, квик с его неинформативными сообщениями об ошибках не причём, это косяк луа (потому что одной конструкцией допускают как подключение скриптов, так и библиотек - тогда уж надо полное имя файла требовать, как в #include С/С++; и в любом случае, в обработчике ошибки можно проверить lua vs dll). Но от этого не легче.

elelel commented 5 years ago

Это особенность lua, в базовом примере, где пошагово расписано, как и что создавать, указаны различающиеся имена. Способов сделать из различных имен одинаковые и устроить конфликт много, вряд ли нужно их всех описывать. Если в скрипте Lua сделать require на самого себя, оно будет по кругу подключать себя и детектить это как луп, о чем сообщается в этой ошибке. Подробнее о том как работает require тут: https://www.lua.org/pil/8.1.html Кроме описанного там могут быть всякие другие двусмысленности, например когда используется разный кейс в идентификаторах модуля. В этом случае для файловой системы на Windows имена одинаковы, а для сравнения имен в таблице названий модуля - разные (сравнение кейс сенсетив).

Arech commented 5 years ago

в базовом примере, где пошагово расписано, как и что создавать, указаны различающиеся имена

ну вот я пока дошёл до урезания функционала и тестирования до той степени, чтобы стало идентично с самым базовым примером, и прошло полдня... Там так написано, да... Но не написано, что не просто так и что это крайне важно ;) зы: одна из гипотез была и про кейс-зависимость где-то, т.к. в названии были заглавные буквы. Привёл всё к нижнему регистру - не помогло) Но описанный Вами случай буду помнить, спасибо.