<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Ошибка в C# DLL ACCESS VIOLATION at address 0x000000000000000]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Ошибка в C# DLL ACCESS VIOLATION at address 0x000000000000000 форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 04 Apr 2026 23:37:59 +0300</pubDate>
		<item>
			<title>Ошибка в C# DLL ACCESS VIOLATION at address 0x000000000000000</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56169/topic6530/">Ошибка в C# DLL ACCESS VIOLATION at address 0x000000000000000</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Пробую писать DLL для работы с терминалом без помощи LUA - в lua файле только инструкция require(&#39;Module&#39;).<br />Регистрирую метод OnStop и main внутри DLL:
====code====
<pre>&#91;DllExport("luaopen_Module", CallingConvention = CallingConvention.Cdecl)&#93;
public static int InitModule(IntPtr luaState) {
&nbsp;&nbsp;&nbsp;&nbsp;LuaBinding.lua_pushcclosure(luaState, OnStop, 0);
&nbsp;&nbsp;&nbsp;&nbsp;LuaBinding.lua_setglobal(luaState, "OnStop");

&nbsp;&nbsp;&nbsp;&nbsp;LuaBinding.lua_pushcclosure(luaState, Start, 0);
&nbsp;&nbsp;&nbsp;&nbsp;LuaBinding.lua_setglobal(luaState, "main");

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}</pre>
=============
Далее метод OnStop:
====code====
<pre>static int OnStop(IntPtr luaState) {
&nbsp;&nbsp;&nbsp;&nbsp;isRunning = 0;
&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}</pre>
=============
main:
====code====
<pre>static int Start(IntPtr luaState) {
&nbsp;&nbsp;&nbsp;&nbsp;while (isRunning == 1) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(10);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;isRunning = 1;

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}</pre>
=============
Когда скрипт стартует, то в течение нескольких секунд (всегда по разному) его можно корректно остановить без ошибок. Но после некоторого времени (минуту или больше) получаю: ACCESS VIOLATION at address 0x000000000000000.<br /><br />Не понимаю почему так происходит, ощущение, будто кто-то прибил ссылку на мою функцию OnStop, возможно LUA GC, но почему не понимаю.<br /><br />Находил подобное мнение здесь: <noindex><a href="https://forum.quik.ru/messages/forum10/message43855/topic5317/#message43855" target="_blank" rel="nofollow">https://forum.quik.ru/messages/forum10/message43855/topic5317/#message43855</a></noindex> про GC, но как такое исправить не понимаю и почему активная ссылка на функцию может прибиться?<br /><br />Сам код внутри main может работать без проблем часами (там для теста идет обращение к функции isConnected() и пишется все в лог). <br />
			<i>11.06.2021 12:28:35, Sergey.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56169/topic6530/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56169/topic6530/</guid>
			<pubDate>Fri, 11 Jun 2021 12:28:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
