Si te gusta usar .net, puedes hacer que haga algunas tareas en Torque.
Esto es sólo un ejemplo de como usar .net en Torque.
Todo el código fuente es gratis y lo puedes usar bajo tu responsabilidad.
Si necesitas más referencias ve a la página web de MSDN o GarageGames. Alguna información ha sido extraída de esas páginas.
Para este ejemplo se ha usado Visual C# 2005, Visual C++ 2008 y las librerías de Mono (ms 2.0) para la conexión a PostgreSQL
Vamos a obtener la versión de la base de datos que es muy similar a hacer un “select” o un “insert”.
Como primer paso creamos una DLL (ClassLibrary) en C#.
Editamos el código fuente, añadimos el interface público y cambiamos su nombre. Este interface lo usaremos para exponer su métodos a través de COM.
Añadimos también la funcionalidad Postgres, en este caso, sólo un “select version()”.
[sourcecode lang="cpp"]
using Npgsql;
namespace Database
{
public interface IPGDatabase
{
String pgVersion();
}
public class PGDatabase : IPGDatabase
{
conn = new NpgsqlConnection(“Server=192.168.11.150;Port=5432;User Id=user;Password=secret;Database=DBl;”);
conn.Open();
NpgsqlCommand command = new NpgsqlCommand(“select version()”, conn);
String serverversion;
[/sourcecode]
Para exponer el interface com debemos editar el fichero AssemblyInfo.cs y cambiar la línea”[assembly: ComVisible(false)]” por “[assembly: ComVisible(true)]“.
Creamos ahora un nombre fuerte a nuestra DLL. Desde el prompt de Visual Studio teclea “snk.exe -k database.snk”. Copia este fichero al proyecto, edita las propiedades del proyecto y ve a la pestaña de firmar. Pincha sobre “Firmar el ensamblado” y elige el fichero recien creado.
Compila el proyecto para crear la DLL Managed
Vamos a registrar la información de ensamblado de la DLL.
Desde un prompt de Visual Studio, ve al directorio donde esté la DLL y teclea
regasm database.dll /tlb:database.tlb /codebase
Copia este fichero al proyecto Torque
Crea una clase en Torque y prepárala para usarla en la consola como el ejemplo de abajo (si tienes dudas ve a la página web de GarageGames)
[sourcecode lang="cpp"]
class DBVersion: public SimObject
{
…
public:
DECLARE_CONOBJECT( DBVersion );
…
IMPLEMENT_CONOBJECT( DBVersion );
…
ConsoleMethod(DBVersion,getVersion, const char*, 2, 2,”()Returns the postgresql.”)
[/sourcecode]
Importa el fichero .tlb añadiendo la línea “#import “..\game\database.tlb” raw_interfaces_only”, y usa el nuevo espacio de nombres recien creado “using namespace database”
Si todo ha ido bien, tendremos acceso a nuestra dll managed
Creamos el puntero al interface y llamamos a nuestra función
[sourcecode lang="cpp"]
HRESULT hr=CoInitialize(NULL);
IPGDatabasePtr pIDatabase(__uuidof(PGDatabase));
long lResult=0;
pIDatabase->pgVersion(&bstrstring);
CoUninitialize();
[/sourcecode]
Como la DLL está devolviendo una cadena BSTR, necesitaremos hacer una pequeña conversion:
[sourcecode lang="cpp"]
_bstr_t _bstrstring(bstrstring);
strcpy_s(version, (char *)_bstrstring);
return (StringTableEntry) &version[0];
[/sourcecode]
Tiempo de probarlo. Compila el proyecto, ejecuta el motor de juegos torque, abre la consola y teclea:
$a=new DBVersion();
echo($a.getVersion());
¡Disfrútalo!
Notar que esto es sólo un ejemplo. No hay control de errores, el código se puede mejorar,…


0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.
Leave a Comment