5 mensajes Página 1 de 1
Saludos, esto va dirigido a nuestro santo por excelencia SAN PABLOKO DE HACHIS! :)
Bueno y a quien se vea capacitado para hacer algun tuto de introduccion a actions pubgins con visual c#, hay uno por hai de indigo rose pero la verdad yo no me netero de na , un abrazo
no se puede...sdk = c++ no c#.
a no? puf! c++ como que ni papa XD
creo que pablo iba a sacar algo con c# pero lo dejo...
Bueno, en su dia pensé en una especie de proxy, pero no se pudo conseguir, es decir, habia 2 partes, una en c++ la cual funcionaba a las mil maravillas, y 2 partes en .net, una con el action/object, la cual funcionaba de lujisimo, y la que lo jodio todo, el wrapper de lua para .net, el cual se llama luaInterface.

Habia varios problemas con ellos, uno de ellos era que un assambly (dll) perteneciente a luainterface se llama lua51.dll, al tener que ponerlo en el cd_root se solapaba al lua51.dll del runtime, siendo diferentes librerias, esto lo solucione cambiando el proyecto de luainterface para que esta dll se llamara lua511.dll, por ejemplo.

Luego de esto, y de algunos retoques en luainterface, ya que este requiere un lua module llamado luinterface, hay que eliminar su creación de luainterface paraque no crashee... pude recoger el lua_state enviado por el action plugin c++ y adjuntarme a ese stack, de hecho pude hacer correctamente lua_dostring y funciones similares, el problema viene a la hora de asignar funciones a un modulo lua, por alguna razon todo peta y no puedo saber que falla, la cosa estaba bastante avanzada y pintabamuy bien pero decidi dejarlo, porque al fin y al cabo la dll tiene la misma funcionalidad sin tanto calentamiento de oya.

El codigo c++ era muy simple debido a que solo habia que referenciar algunas funciones que retornaban string con nombres conocidos para hacer la funcionalidad, por ejemplo

int irPlg_Action_RegisterActions(lua_State* L)
{
       
        typedef VOID (CALLBACK* LPFNDLLFUNC1)(lua_State*);


        HINSTANCE hDLL;            
        LPFNDLLFUNC1 lpfnDllFunc1;  
        DWORD dwParam1;
        UINT  uParam2, uReturnVal;

        hDLL = LoadLibrary("LuaInterfacePabloko.dll");
        if (hDLL != NULL)
        {
           lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "bind");
           if (!lpfnDllFunc1)
           {
                  FreeLibrary(hDLL);
           }
           else
           {
                          lpfnDllFunc1(L);
           }
        }

        return 0;


}
Parsed in 0.004 seconds, using GeSHi 1.0.8.9


Este codigo de aqui ejecutaria la funcion bind de la dll luainterfacepabloko.dll, pasandole como unico argumento un puntero al lua_state

En las demas funciones recibirian parametros string como el nombre, version o capacidad para abrir un dialogo de propiedades...

Luego era tan facil como hacer esto.

using System;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;
using Lua511;
using LuaInterface;
using System.Windows.Forms;

namespace LuaInterfacePabloko
{
   internal static class UnmanagedExports
   {
       //static Lua L = new Lua(long ls);
       public static Lua L = null;
       
       [DllExport("bind", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
      static void Bind(IntPtr ls)
      {
          Lua L = new Lua(ls.ToInt64());
          lll wee = new lll();
          //L.DoString("a='eoeoeoeoeo Pabloko Rulez!!'");
          try
          {
              L.DoString("a=1+2+3+4+5+6; Dialog.Message('',a)"); //esto funciona
              L.RegisterFunction("PablokoSays", wee, wee.GetType().GetMethod("PablokoSays")); //esto peta al ser llamado
          }
          catch (Exception e) { }
      }
       
   }

public class lll
   {
       public static Lua L = null;
       
       public void PablokoSays(string uno, string dos)
       {
           return uno + ' ' + dos;  
       }
   }
}
Parsed in 0.005 seconds, using GeSHi 1.0.8.9


Esto funciona, pero en algun momento algo perteneciente a luainterface peta, y me lo puedo explicar ya que luainterface no es el mismo tipo de lua que usamos sino otro con muchas mas modificaciones...

Asi que esta parte esta clara, si alguien puede conseguir otro interfaz de lua para .net, como por ejemplo luadotnet http://www.codeproject.com/KB/mcpp/luanetwrapper.aspx y darle caña, o modificar luainterface y depurarlo hasta que funcione, cojonudo, seguro que podria acabar rulando
ImagenImagenImagenImagen
5 mensajes Página 1 de 1

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron