Петр Петров
Петр Петров личный блог
31 мая 2016, 22:03

Коннектор QLUA и C#. Передача данных через стек.

Прошу дать ссылку на адекватный форум или другой ресурс по программированию на QLUA.
Интересуют вопросы передачи данных через стек и многопоточность в QLUA.
Как оказалось, есть много подводных камней.
Кто в теме, пожалуйста, укажите на возможные ошибки в коде, а главное — ПОЧЕМУ НЕ РАБОТАЕТ File.WriteAllLines(@«File.txt», array);
Буду очень благодарен.

-------------------------------------------
Скрипт QLUA:
require («InQuikDll»);
-----------------------------------------------------
Код на C#

using System.IO; 

[DllExport(«luaopen_InQuikDll», CallingConvention = CallingConvention.Cdecl)]
public static int InQuikDllStartUp(IntPtr L)
{
Lua.lua_pushinteger(L, 0);
Lua.lua_setfield(L, -10002, "_runServer");

//Вставляет новый экземпляр функции C в стек
Lua.lua_pushcclosure(L, forLua_OnInit, 0);
Lua.lua_setfield(L, -10002, «OnInit»);

Lua.lua_pushcclosure(L, forLua_OnStop, 0);
Lua.lua_setfield(L, -10002, «OnStop»);

Lua.lua_pushcclosure(L, forLua_OnClose, 0);
Lua.lua_setfield(L, -10002, «OnClose»);

Lua.lua_pushcclosure(L, forLua_OnQuote, 0);
Lua.lua_setfield(L, -10002, «OnQuote»);

Lua.lua_pushcclosure(L, forLua_OnConnected, 0);
Lua.lua_setfield(L, -10002, «OnConnected»);

Lua.lua_pushcclosure(L, forLua_Main, 0);
Lua.lua_setfield(L, -10002, «main»);

return 0;

}
//------------------------------------------------------------

static int forLua_Main(IntPtr L)
{
while (true)
{
Lua.lua_getfield(L, -10002, "_runServer");
if ((int)Lua.lua_tonumber(L, -1) == 0)
{
Thread.Sleep(10);
}
else
{
break;
}
Lua.lua_pop(L, 1);
}
return 0;
}
//-------------------------------------------------------

static int forLua_OnQuote(IntPtr L)
{
getQuoteLevel2(L);
return 0;
}
//--------------------------------------------------

public static void getQuoteLevel2(IntPtr luaState)
{
uint ll = 0;

string classOnQuote = Marshal.PtrToStringAnsi(Lua.lua_tolstring(luaState, 1, out ll));
string secOnQuote = Marshal.PtrToStringAnsi(Lua.lua_tolstring(luaState, 2, out ll));
Lua.lua_getfield(luaState, -10002, «getQuoteLevel2»);
Lua.lua_pushvalue(luaState, 1);
Lua.lua_pushvalue(luaState, 2);
string[] array = new string[] { classOnQuote, secOnQuote };
try
{
// File.WriteAllLines(@«File.txt», array); <-- QUIK выдает ошибки, если снять комментарий и откомпилировать библиотеку???? 
}
catch (SystemException ex)
{
throw ex;
}
Lua.lua_pop(luaState, Lua.lua_gettop(luaState));
}
//-------------------------------------------------------------
static int forLua_OnStop(IntPtr L)
{
Lua.lua_pushinteger(L, 1);

Lua.lua_setfield(L, -10002, "_runServer");
return 0;
}

13 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн