Изменения в добавлении и запуске Lua скриптов с обновлением версии QUIK

Страницы: 1
RSS
Изменения в добавлении и запуске Lua скриптов с обновлением версии QUIK, Подключение dll через добавление и запуск Lua скрипта
 
Есть собственная dll-ка, которая подключается  через Lua к Quik. В этой dll динамически подключается еще одна dll (shared memory - https://msdn.microsoft.com/en-us/library/windows/desktop/ms686958(v=vs.85).aspx - как пример).
Обновился до последней версии Quik 7.16.3.14 и как итог при повторном запуске Lua скрипта, подключающего dll, вторая dll(shared memory) не подключается:(((  Если же удалить скрипт из списка загруженных и добавить по новой, то при первом запуске все срабатывает как и в старой версии. Что могло измениться?
 
Уточнение.
При повторном запуске Lua скрипта после перезапуска Quik.  
 
Возможно спрашиваю не по-русски :))) Попробую иначе:

Есть Quik 7.16.3.14, библиотека 1.dll для QLua, в которой есть загрузка другой библиотеки 2.dll через функцию LoadLibrary();

1. Запускаю Quik->Сервис->Lua скрипты...
->В окне "Загруженные скрипты" - пустота
2. Жму на "Добавить", выбираю свой Lua-скрипт с функцией require("1.dll")
->появляется файл моего Lua-скрипта в окне "Загруженные скрипты"
3. Выделяю его, жму "Запустить"
-> Функция LoadLibrary() в 1.dll загружает 2.dll и Lua скрипт работает
4. Жму "Остановить"
-> Lua скрипт останавливается
5. Жму "Запустить"
-> Lua скрипт работает и функция LoadLibrary() в 1.dll загружает 2.dll
6. Жму "Остановить"
-> Lua скрипт останавливается
7. Закрываю окно. Закрываю Quik.
8. Запускаю Quik->Сервис->Lua скрипты..
->В окне "Загруженные скрипты"  есть файл моего Lua-скрипта
9. Выбираю, жму "Загрузить"
-> Lua скрипт работает, 1.dll - работает, а вот функция LoadLibrary() 2.dll не загружает.... ПОЧЕМУ?
10. Жму "Остановить", "Удалить", "Добавить", выбираю свой скрипт и т.д... жму "Запустить"
-> Все опять работает до следующей перезагрузки Quik.

В предыдущих версиях Quik работало во всех случаях!
Кто сталкивался? Подскажите куда смотреть?
Что это? особенности сборки нового Quik?
 
Добрый день.
Считаем что 1.dll и 2.dll лежать в одном каталоге
в 1.dll должен присутствовать код, который делает примерно следующее (без обработки ошибок):
1.
Код
bool getDllPath(char *out_path, size_t max_size)
{
    char path[MAX_PATH] = {};
    HMODULE hm = NULL;

    if( GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
                            (LPSTR) &getDllPath, &hm ) )
    {
        GetModuleFileName( hm, path, sizeof(path) );
        /*
           тут надо обрезать из path "1.dll" или "\\1.dll", по вкусу
           и скопировать в out_path
        */
       .....
       return true;
    }
    return false;
}

2. При успешном выполнении к out_path приклеить "2.dll" и загрузить ее через LoadLibrary


https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683200(v=vs.85).aspx
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683197(v=vs.85).aspx
 
Цитата
Michael Bulychev написал:
Добрый день.
Считаем что 1.dll и 2.dll лежать в одном каталоге
в 1.dll должен присутствовать код, который делает примерно следующее (без обработки ошибок):
1.
Код
  bool getDllPath(char  * out_path, size_t max_size)
{
    char path[MAX_PATH]  =  {};
    HMODULE hm  =  NULL;

     if ( GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS  |  GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
                            (LPSTR)  & getDllPath,  & hm ) )
    {
        GetModuleFileName( hm, path, sizeof(path) );
        / * 
           тут надо обрезать из path  "1.dll"  или  "\\1.dll" , по вкусу
           и скопировать в out_path
         * /
        ..  .. .
        return   true ;
    }
     return   false ;
}  

2. При успешном выполнении к out_path приклеить "2.dll" и загрузить ее через LoadLibrary


https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683200(v=vs.85).aspx
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683197(v=vs.85).aspx

в path пишется абсолютный путь 1.dll !!!
Респект!
Все как и ожидалось :)))) Quik не причем, это я изменил в функции LoadLibrary() путь к 2.dll с абсолютно указанного на относительный и даже не подумал... Как-то так :)))

 
Страницы: 1
Читают тему
Наверх