Sergey (Все сообщения пользователя)

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

Страницы: 1
Ошибка в C# DLL ACCESS VIOLATION at address 0x000000000000000
 
Пробую писать DLL для работы с терминалом без помощи LUA - в lua файле только инструкция require('Module').
Регистрирую метод OnStop и main внутри DLL:
Код
[DllExport("luaopen_Module", CallingConvention = CallingConvention.Cdecl)]
public static int InitModule(IntPtr luaState) {
    LuaBinding.lua_pushcclosure(luaState, OnStop, 0);
    LuaBinding.lua_setglobal(luaState, "OnStop");

    LuaBinding.lua_pushcclosure(luaState, Start, 0);
    LuaBinding.lua_setglobal(luaState, "main");

    return 0;
}
Далее метод OnStop:
Код
static int OnStop(IntPtr luaState) {
    isRunning = 0;
   
    return 0;
}
main:
Код
static int Start(IntPtr luaState) {
    while (isRunning == 1) {
        Thread.Sleep(10);
    }
    isRunning = 1;

    return 0;
}
Когда скрипт стартует, то в течение нескольких секунд (всегда по разному) его можно корректно остановить без ошибок. Но после некоторого времени (минуту или больше) получаю: ACCESS VIOLATION at address 0x000000000000000.

Не понимаю почему так происходит, ощущение, будто кто-то прибил ссылку на мою функцию OnStop, возможно LUA GC, но почему не понимаю.

Находил подобное мнение здесь: https://forum.quik.ru/messages/forum10/message43855/topic5317/#message43855 про GC, но как такое исправить не понимаю и почему активная ссылка на функцию может прибиться?

Сам код внутри main может работать без проблем часами (там для теста идет обращение к функции isConnected() и пишется все в лог).
Не синхронизируется файл новостей news.log в процессе работы терминалы
 
Подскажите, пожалуйста, синхронизация была намеренно выключена пока терминал не закрыть или это баг? Раньше с каждой новой новостью она добавлялась в файл и можно было отслеживать приход новостей по размеру файла. Сейчас в последней версии терминала пока его не закрыть, в файл ничего не записывается и отслеживать невозможно.
Страницы: 1
Наверх