Ante q nada gracias por su ayuda, respuestas y recomendaciones anteriores. Acá vuelvo bombardeando una serie de dudas q me han quedado después de experimentar con los objetos Gráficos de DOLPHIN 5.
1.Como puedo hacer para agregar una caption a una shell cualquiera. La defino en el view composer, pero cuando invoco al método show para verla me aparece como no definida "Untitled".
2.Como hago para poder concatenar dos string en uno sola.
3.Como hago para mostrar un valor como predefinido en un combo box. Especifico el modelo (una Ordered Collection) pero como hago para que uno de los objetos aparezca como predefinido en la pantalla.
4. Como hago para manejar gráficos estadísticos, necesito saber si hay alguna clase q lo haga y si es posible me
gustaría ver un ejemplo.
5. Existe alguna clase que maneje ecuaciones diferenciales. Tuve q cargar "manualmente", un mensaje q lo soportará mediante un método numérico, me gustaría saber si existe alguna en el enorme ambiente que viene en la imagen, para poder obtener resultados mas exactos.
Gracias de nuevo por las respuestas anteriores. Y esperando que me saquen algunas de estas dudas.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Sinceramente, no recuerdo si este correo lo que voy a comentar, lo llegué a enviar, o simplemente fué algo que pensé escribir y no hice.
Resumiendo. Llevo poco tiempo en squeak, pero, no se si es mi imaginación, pero desde que han habido elecciones, la lista de squeak-dev tiene bastante movimiento.
Hola kiko,
> Supongo que no es una traba para poder usar el motor ??.
No me pareció que Diego dijera que algo te impidiera usarlo,
sino más bien que al usarlo, seguramente deberías lidiar con
elementos externos, y por eso, por ejemplo, soportar duplicación
de código/algoritmos/técnicas y/o usar elementos que ya están
resueltos en tu ambiente, de forma más consistente con él mismo
(en C y sus derivados no hay convergencia hacia frameworks
básicos, y es común que las personas deseen innovar hasta en
cosas elementales).
Una pregunta que me parece interesante plantearnos (usando
como ejemplo esta situación que a vos te toca), es:
hay una alternativa equivalente?
(es decir, podrías usar otra cosa?)
Varias veces me ha pasado que uno usa soportes
convencionales, por no existir algo resuelto con objetos (de forma
decorosa y que no se prevea que sufrirá de obsolescencia prematura).
Cómo respuesta, decir, bueno... uno puede hacerlo;
es muy inocente; y no siempre se puede aplicar
en la práctica.
Decir que si uno lo hiciera con Smalltalk sería mejor,
es engañoso; he visto varias cosas desastrosas hechas
en Smalltalk (incluso en 3D); aunque sin lugar a dudas
es lo mejor que pudieron hacer sus autores (y esto no
es una crítica hacia ellos, sino una "justa" evaluación
de los resultados, ante la óptica de quien al menos se
sintió tentado de aprovechar los "famosos" frutos de
sus esfuerzos).
En resumen, hay varias áreas dónde no se ven soluciones
usando Smalltalk. En mi opinión, porque no hay gente
con el conocimiento necesario (en Smalltalk) para
realizarlos de forma eficiente/satisfactoria y a esta
razón deberíamos sumarle dos mas... [*]
1.- no hay mucha gente "interesada" en superar los limites
existentes en las técnicas de uso común (la mayoría ni los ve)
sino más bien en usar lo mismo y así resolver los problemas
que genera, sin reflexionar sobre las bases (a todo lo hace
"un objeto" y así hasta el infinito... que triste destino)
2.- un gran porcentaje de gente interesada en Smalltalk,
lo está, pues así se hace ver. Es un gran porcentaje además,
el que suma la gente que desea capacitarse, pero es
universitario (es decir, no puede ocuparse de lleno al tema,
sino que debe distraer su atención en otras disciplinas,
incluso en desarrollos que no se hacen con T.O. o se hacen
con herramientas solo O.O.; que lo mínimo que producen
son dudas... que no se pueden contestar sin tener
experiencia real :).
Volviendo al tema, e intentando sintetizar el comentario en
una frase; me parece que es frecuente hoy, que no tengamos
alternativas decorosas en algunos contextos de aplicación,
y que debamos elegir que es lo menos malo.
No siempre es mejor/posible empezar de cero.
hasta pronto,
Ale.
[*] Quienes tenemos algunos años en esto podríamos además
preguntarnos que hemos hecho (o no) para que esta situación
sea las que nos toca vivir hoy.
----- Original Message -----
From: "kikote gregoris" <kikogregoris@...>
To: <smalltalking@...>
Sent: Friday, March 17, 2006 4:54 PM
Subject: Re: [objetos] Objetos C++ con ST
> Hola diego
>
> OK , ahora me queda claro a que te referias .
> Supongo que no es una traba para poder usar el motor ??.
>
> saludos kiko
>
> Diego Fernandez <diegof79@...> escribió:
> A "alto nivel" me refiero a que Nebula no solo provee graficos 3d (ala
OpenGL), si no que ademas tiene modeladas muchas abstracciones como file
I/O, threads, etc
(http://nebuladevice.cubik.org/documentation/nebula2/modules.shtml)
>
> El tema es que vas a tener que decidir donde hacer un "corte", por
ejemplo: usas el file i/o del framework ó usas los streams de St? Pero el
framework me da una rutina en C que lee archivos de 3ds max, por que no la
voy a usar?
>
> La cagada es que como C++ no es un ambiente de objetos puede que tu
programa se haga dificil de debuggear y diseñar (C++ no es amigable para la
prueba y error... ni para el manejo de memoria :( ).
>
> Por eso cuando se usa una librería C, se trata que la "logica" de mapeo
sea la minima posible, asi haces el 99% en St y en C te queda todo lo que
sea de "bajo nivel" (como hablar con el driver de video).
> Esa "estrategia" simplifica mucho el desarrollo: como las rutinas de mapeo
en C son de bajo nivel podes testearlas bien las compilas una vez y te
olvidas de volver a C por mucho tiempo :) (incluso hasta los malloc/free te
conviene manejarlos en St)
> Asi es como hacen muchos St para interactuar con el sistema operativo (por
ejemplo Squeak solo tiene implementado en la VM el BltBit el resto del
framework grafico esta en St, VAST usa el API de Windows para las ventanas
pero trata que ese mapeo sea minimo --SWT en Java hace lo mismo--, VW
tambien hace algo asi con la UI).
>
> On 3/16/06, kikote gregoris <kikogregoris@... > wrote:
Hola diego
>
> Que es lo que te hace pensar que nebula tiene características de alto
nivel que me puedan complicar la vida ??.
> Yo leí la documentación y sin ser un experto en ingles no encontré nada
que me haga pensar en lo que comentas .
>
> saludos kiko
>
>
> Diego Fernandez < diegof79@...> escribió:
>
>
> La verdad que no sé nada de formas automaticas de hacer esas cosas :(
> (tengo entendido que habia una herramienta para VAST que leia archivos .h
y generaba la interfaz minima para comunicarse desde ST, tambien creo hay
algo parecido en VW con lo de CConect, pero nunca use ninguna de las dos
:(... y nunca use MT)
>
> Con respecto a Nebula, tene en cuenta lo siguiente:
> Por lo poquito que vi de la documentacion, Nebula es un API de "alto"
nivel. Es decir no hace solo rendering 3d con OpenGL si no que tambien
modela muchas cosas para el manejo de esos "mundos" 3d.
> Esto tiene una gran contra: vas a estar siempre luchando entre dos
lenguajes C++ y ST, ya que probablemente quieres tener este modelo de
"mundos" en ST :(
> Es mas recomendable utilizar C solo para cosas de "bajo" nivel (por ej. el
rendering con OpenGL) y modelar el resto en ST, te va a hacer la vida más
facil por que el mapeo con cosas en C de mas "bajo" nivel lo podes hacer
casi 1 a 1 (y probablemente en MT ya hay cosas para usar OpenGL)
>
> On 3/13/06, kikote gregoris < kikogregoris@...> wrote:
Hola diego
>
> Muy buena la explicación , la verdad es que no tenia idea de todo este
quilombo.
> Voy a investigar un poco mas la cuestión , para que me quede bien claro.
> Sobre nebula es cierto que tiene como vos decís "bindings" para usar con
phyton , lua (que no se que carajo es) , rubi y tcl.
> Alejandro decía que había una manera media automática para hacer estas
cosas , sabes algo sobre eso.??
>
> Diego Fernandez < diegof79@...> escribió:
>
> (quizas lo que sigue es una explicación muy boluda de cosas que ya
sabes, pero que son nesarias para entender por que interactuar con C++ es
más complejo que interactuar con C)
>
> Aunque tengas pocos conocimientos de C/C++ ya sabes que este lenguaje
(como muchos otros), hace una diferencia grande entre "tiempo de desarrollo"
(cuando escribis el programa en formato texto) y "tiempo de ejecución"
(cuando el programa se interpreta en formato binario).
> En esa traducción de texto a binario se divide en dos etapas: compilar
(traducir el texto a binario) y linkear (enlazar diferentes partes ya
compiladas del programa). Asi por ejemplo cuando escribis:
>
> suma(2, 2);
>
> Cuando compilas se crea una referencia a la función suma que tiene una
"firma" particular: nombre la función + tipos de los parametros (en ingles
es signature, pero no sé si firma seria la traduccion correcta).
> Luego el linker lo que hace es unir estas referencias, asi por ejemplo
"suma" se une con algo cuya firma seria: suma(int, int) (es por eso que
aunque la funcion suma este implementada en una librería y no estes
compilando el codigo fuente para suma, es necesario declarar la función,
ver: http://en.wikipedia.org/wiki/Linker )
>
> Ahora... C++:
> C++ agrega dos caracteristicas: "objetos" y la posibilidad de declarar
funciones con diferentes aridades, por ejemplo:
> suma(int, int);
> suma(long, long);
>
> Para distintiguir estas declaraciones el compilador lo que hace es
codificar la "firma" de las funciones (esto se llama name mangling, ver
http://en.wikipedia.org/wiki/Name_mangling ). O sea suma en el archivo
objeto puede convertirse en:
> suma_int_int
> suma_long_long
>
> Este namemangling tambien se utilizar para diferenciar los metodos en un
"objeto".
> Lo del namemangling no representa mucha dificultad que digamos, es
cuestion de ver que nombre final tiene la función en la DLL (no se como es
en Windows pero en Unix/Linux se puede usar "nm" para ver los simbolos que
exporta un shared library).
>
> Lo más complicado es que en C++ los objetos no son como en St, no hay una
recepcion de mensajes.
> Cuando se compila el compilador accede directamente a los metodos (la
direccion en memoria), a menos que se declare el metodo como "virtual", en
cuyo caso se accede al metodo mediante una tabla que apunta a la direccion
donde esta la implementacion del metodo (vtable).
>
> Te estaras preguntando para que sirve saber todos estos detalles.
>
> Cuando haces una DLL se exportan ciertos simbolos para que estos puedan
ser accedidos mediante un linker ó "dinamicamente" mediante API para manejar
DLLs.
> El linker maneja automaticamente todo este problema del namemangling, pero
que pasa cuando accedes dinamicamente a las funciones de la DLL?
> Ahi estas limitado al acceso que te da el API para DLLs (ver
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/ge\
tprocaddress.asp)
> que nombre usas para acceder a la función si esta tiene "multiples
firmas", ó si es un metodo?
> Y si es un metodo "virtual"? Ahi ademas deberias conocer la estructura
interna que usa el compilador para representar los objetos y hacer el lookup
en el vtable.... En definitiva un quilombo!!
> (de nuevo este quilombo lo resuelve el compilador de C++ cuando usas
librerias en C++, por eso tambien hay problemas de compatibilidad entre
diferentes compiladores de C++, esa la razón por la cual las APIs de los
sistemas operativos suelen estar escritas en C)
> Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas
en C++:
> extern "C" int sumaInt(int a, int b) {
> return suma(a, b)
> }
> extern "C" long sumaLong(long, long) { ... }
>
> El extern "C" es para que cuando se genere la tabla de simbolos se
utilizen simbolos compatibles con las convenciones de C. A eso se refiere
Alejandro con hacer un wrapper.
> (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó
TCL asi que debe tener wrappers de este tipo)
>
>
> On 3/9/06, kikote gregoris < kikogregoris@...> wrote:
Hola ALe
>
>
> Los fuentes estan para hacer lo que uno quiere , no hay una DLL echa .
> Con respecto a exponer un API , podrías decirme como hacer esto con
algun ejemplo bien pabo, si no te jode .
> Mi conocimiento sobre C y C++ es escaso.
>
> Otra cosa que quiere decir:
>
>
> De esta forma uno usa desde C la funcionalidad
> y no se complica con el uso de componentes
> e interfaces altamente fraccionadas
>
>
> saludos kiko
>
> "Alejandro F. Reimondo" < aleReimondo@...> escribió:
>
>
> Hola,
>
> > Que es eso de hacer un wrappers
> > intermedios en C ???.
>
> Exponer el conjunto de funciones para ser
> usadas desde C u otra plataforma por medios
> tradicionales.
> Normalmente, los componentes de la librería se
> ven como punteros que son vueltos a pasar
> a la librería (que los genera) sin importar si
> son estructuras o componentes Cpuspus.
> De esta forma uno usa desde C la funcionalidad
> y no se complica con el uso de componentes
> e interfaces altamente fraccionadas.
>
> > Otra cosa que no entendí es :
> > Hoy en día es muy raro encontrar que quien
> > expone una librería lo hace solo
> > en C++ (y no expone una API);
>
> Normalmente quien hace una librería expone
> una API para ser usada desde C.
> Exponer componentes, en el caso de C++ (y
> otros LOOs) te fuerza a usar la misma plataforma
> de desarrollo del autor (lo que sería un mal
> menor, al compararlo frente a lo que implica usar
> sus componentes :-P ).
>
> suerte con Nebula2,
> hasta pronto,
> Ale.
>
>
>
>
> ----- Original Message -----
> From: "kikote gregoris" < kikogregoris@...>
> To: < smalltalking@...>
> Sent: Wednesday, March 08, 2006 4:54 PM
> Subject: Re: [objetos] Objetos C++ con ST
>
>
> > Hola Ale
> >
> > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que
> esta desarrollado enteramente en C++, el motor es Free y se puden bajar
> todos los fuentes http://nebuladevice.cubik.org/
> >
> > En algún momento pregunte si era conveniente el desarrollar un engine
en
> st , lo cual sigo pensando que seria la mejor solución .El problema es que
> esto me aleja de mi objetivo primario que es desarrollar un game ,
charlando
> con los desarrolladores de games de junin Oniric , me recomendaron que
tome
> la alternativa mas corta pues ellos tomaron la mas larga y no me lo
> recomendaron para empezar.
> >
> > Es por eso que quería saber como hacer la conexión con objetos c++,
vos
> decís que es parecido a lo que se hace con objetos COM , tengo entendido
que
> los COM y los C++ son compatibles a nivel binario nada mas , cual es la
> diferencia entre ambos.
> > En MT la comunicación con COM es bastante fácil , ya que hay todo un
> mecanismo bien definido para tal caso.
> >
> > Que es eso de hacer un wrappers
> > intermedios en C ???.
> >
> > Otra cosa que no entendi es :
> >
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> solo
> > en C++ (y no expone una API);
> >
> > saludos kiko
> >
> >
> >
> > "Alejandro F. Reimondo" < aleReimondo@...> escribió:
> > kiko,
> >
> > Seguramente en MT tenes una opción muy transparente para usar elementos
de
> > C++... pues el compilador es estático y preparado para integrarse bien
con
> > windows.
> > Fijate como se accede a objetos COM y seguramente allí tendrás guías de
> como
> > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios
del
> MT
> > para ser bien asistido en esta duda).
> >
> > En un momento (hace casi 10 años) me toco hacer una conexión como la que
> te
> > estás planteando (con un Smalltalk mío) para acceder a rutinas de
> compresión
> > por fractales (algo que estaba por "ponerse de moda" para comprimir
> > imágenes, en ese entonces).
> > El usar objetos C++ es algo menos frecuente de lo que parece.
> > En ese momento lo que hice fue definir los métodos que tenia la DLL como
> api
> > calls (buscando la dirección del binding con el nombre mangleado y
> > atachandoselo al método Smalltalk explícitamente), con un diseño similar
> al
> > que tiene VS.
> > Así accedía a las funciones de instanciación del objeto C++.
> > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla
> virtual
> > y mapeaba la estructura del objeto cpuspus a una estructura dinámica
> > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk
> > mapeando la tabla virtual con métodos definidos como API y a los que le
> > pichicateaba la dirección de las funciones encontradas en la tabla
> virtual.
> >
> > Como te imaginarás todo funcionaba de maravillas... pero luego de
hacerlo
> > (cosa indispensable para mantener mi sanidad y no tener que hacer
wrappers
> > intermedios en C) llegue a la conclusión que no era algo digno de
> recomendar
> > :-)
> >
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> solo
> > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría
que
> > evalúes si podes evitar usarlo (para no heredar la obsolescencia
> > característica de este tipo de librerías).
> >
> > suerte,
> > Ale.
> >
> >
> >
> >
> >
> > ----- Original Message -----
> > From: "kikote gregoris" < kikogregoris@... >
> > To: < smalltalking@...>
> > Sent: Monday, March 06, 2006 4:52 PM
> > Subject: [objetos] Objetos C++ con ST
> >
> >
> > > Hola gente
> > >
> > > Queira saber como se puede interactuar con una dll que contiene un
> > objeto c++ ?.
>
> > > Algo bien simple , una clase que contiene el metodo
>
> > > int suma(int x , int y) .
> > >
> > > Lo quiero hacer desde el MT .
> > >
> > > saludos kiko
> > >
> > >
> > > ---------------------------------
> > > 1GB gratis, Antivirus y Antispam
> > > Correo Yahoo!, el mejor correo web del mundo
> > > Abrí tu cuenta aquí
> >
> >
> >
> > Para más información sobre la Asociación escribir a
info@...
> >
> > Smalltalking es un espacio colaborativo creado para el estudio y
> desarrollo en Ambientes de Objetos.
> > Se sustenta gracias a la participación de sus socios.
> >
> > Las reglas de etiqueta sobre la lista están en
> http://www.smalltalking.net/join/netiquete.htm
> >
> >
> >
> >
> > ---------------------------------
> > Enlaces de Yahoo! Grupos
> >
> > Para visitar el sitio web del grupo, andá a:
> > http://ar.groups.yahoo.com/group/smalltalking/
> >
> > Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> > smalltalking-unsubscribe@...
> >
> > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
> Yahoo!.
> >
> >
> >
> >
> > ---------------------------------
> > 1GB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí
>
>
>
>
>
>
>
>
> ---------------------------------
> A tu celular ¿no le falta algo?
> Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular .
> Más información aquí.
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
>
>
>
>
>
> ---------------------------------
>
> 1GB gratis, Antivirus y Antispam
> Correo Yahoo!, el mejor correo web del mundo
> Abrí tu cuenta aquí
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
>
>
>
>
>
> ---------------------------------
>
> 1GB gratis, Antivirus y Antispam
> Correo Yahoo!, el mejor correo web del mundo
> Abrí tu cuenta aquí
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
>
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
> ---------------------------------
> Horóscopos, Salud y belleza, Chistes, Consejos de amor.
> El contenido más divertido para tu celular está en
> Yahoo! Móvil
El tema es que vas a tener que decidir donde hacer un "corte", por ejemplo: usas el file i/o del framework ó usas los streams de St? Pero el framework me da una rutina en C que lee archivos de 3ds max, por que no la voy a usar?
La cagada es que como C++ no es un ambiente de objetos
puede que tu programa se haga dificil de debuggear y diseñar (C++ no es amigable para la prueba y error... ni para el manejo de memoria :( ).
Por eso cuando se usa una librería C, se trata que la "logica" de mapeo sea la minima posible, asi haces el 99% en St y en C te queda todo lo que sea de "bajo nivel" (como hablar con el driver de video). Esa "estrategia" simplifica mucho el desarrollo: como las rutinas de mapeo en C son de bajo nivel podes testearlas bien las compilas una vez y te olvidas de volver a C por mucho tiempo :) (incluso hasta los malloc/free te conviene manejarlos en St) Asi es como hacen muchos St para interactuar con el sistema operativo (por ejemplo Squeak solo tiene implementado en la VM el BltBit el resto del framework grafico esta en St, VAST usa el API de Windows para las ventanas pero trata que ese mapeo sea minimo --SWT en Java hace lo mismo--, VW tambien hace algo asi con la UI).
La verdad que no sé nada de formas automaticas de hacer esas cosas :( (tengo entendido que habia una herramienta para VAST que leia archivos .h y generaba la interfaz minima para comunicarse desde ST, tambien creo hay algo parecido en VW con lo de CConect, pero nunca use ninguna de las dos :(... y nunca use MT)
Con respecto a Nebula, tene en cuenta lo siguiente: Por lo poquito que vi de la documentacion, Nebula es un API de "alto" nivel. Es decir no hace solo rendering 3d con OpenGL si no que tambien modela muchas cosas para el manejo de esos "mundos" 3d. Esto tiene una gran contra: vas a estar siempre luchando entre dos lenguajes C++ y ST, ya que probablemente quieres tener este modelo de "mundos" en ST :( Es mas recomendable utilizar C solo para cosas de "bajo" nivel (por ej. el rendering con OpenGL) y modelar el resto en ST, te va a hacer
la vida más facil por que el mapeo con cosas en C de mas "bajo" nivel lo podes hacer casi 1 a 1 (y probablemente en MT ya hay cosas para usar OpenGL)
(quizas lo que sigue es una explicación muy boluda de cosas que ya sabes, pero que son nesarias para entender por que interactuar con C++ es más complejo que interactuar con C)
Aunque tengas pocos conocimientos de C/C++ ya sabes que este lenguaje (como muchos otros), hace una diferencia grande entre "tiempo de desarrollo" (cuando escribis el programa en formato texto) y "tiempo de ejecución" (cuando el programa se interpreta en formato binario). En esa traducción de texto a binario se divide en dos etapas: compilar (traducir el texto a binario) y linkear (enlazar diferentes partes ya compiladas del
programa). Asi por ejemplo cuando escribis:
suma(2, 2);
Cuando compilas se crea una referencia a la función suma que tiene una "firma" particular: nombre la función + tipos de los parametros (en ingles es signature, pero no sé si firma seria la traduccion correcta). Luego el linker lo que hace es unir estas referencias, asi por ejemplo "suma" se une con algo cuya firma seria: suma(int, int) (es por eso que aunque la funcion suma este implementada en una librería y no estes compilando el codigo fuente para suma, es necesario declarar la función, ver: http://en.wikipedia.org/wiki/Linker )
Ahora... C++: C++ agrega dos caracteristicas: "objetos" y la posibilidad de declarar funciones con diferentes aridades, por ejemplo: suma(int, int); suma(long, long);
Para distintiguir estas declaraciones el compilador lo que hace es
codificar la "firma" de las funciones (esto se llama name mangling, ver http://en.wikipedia.org/wiki/Name_mangling ). O sea suma en el archivo objeto puede convertirse en: suma_int_int suma_long_long
Este namemangling tambien se utilizar para diferenciar los metodos en un "objeto". Lo del namemangling no representa mucha dificultad que digamos, es cuestion de ver que nombre final tiene la función en la DLL (no se como es en Windows pero en Unix/Linux se puede usar "nm" para ver los simbolos que exporta un shared library).
Lo más complicado es que en C++ los objetos no son como en St, no hay una recepcion de mensajes. Cuando se compila el compilador accede directamente a los metodos (la direccion en memoria), a menos que se declare el metodo como "virtual", en cuyo caso se accede al metodo mediante una tabla que apunta a la
direccion donde esta la implementacion del metodo (vtable).
Te estaras preguntando para que sirve saber todos estos detalles.
Cuando haces una DLL se exportan ciertos simbolos para que estos puedan ser accedidos mediante un linker ó "dinamicamente" mediante API para manejar DLLs. El linker maneja automaticamente todo este problema del namemangling, pero que pasa cuando accedes dinamicamente a las funciones de la DLL? Ahi estas limitado al acceso que te da el API para DLLs (ver http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp) que nombre usas para acceder a la función si esta tiene "multiples firmas", ó si es un metodo? Y si es un metodo "virtual"? Ahi ademas deberias conocer la estructura interna que usa el compilador para
representar los objetos y hacer el lookup en el vtable.... En definitiva un quilombo!! (de nuevo este quilombo lo resuelve el compilador de C++ cuando usas librerias en C++, por eso tambien hay problemas de compatibilidad entre diferentes compiladores de C++, esa la razón por la cual las APIs de los sistemas operativos suelen estar escritas en C) Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas en C++: extern "C" int sumaInt(int a, int b) { return suma(a, b) } extern "C" long sumaLong(long, long) { ... }
El extern "C" es para que cuando se genere la tabla de simbolos se utilizen simbolos compatibles con las convenciones de C. A eso se refiere Alejandro con hacer un wrapper. (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó TCL asi que debe tener wrappers de este tipo)
> Que es eso de hacer un wrappers > intermedios en C ???.
Exponer el conjunto de funciones para ser usadas desde C u otra plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus. De esta forma uno usa desde C la funcionalidad y no se complica con el uso de componentes e interfaces altamente
fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris" < kikogregoris@...> To: < smalltalking@...> Sent: Wednesday,
March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como hacer la conexión con objetos c++, vos decís que es
parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" < aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy transparente para usar elementos de > C++... pues
el compilador es estático y preparado para integrarse bien con > windows. > Fijate como se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene VS. > Así accedía a las funciones de instanciación
del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la obsolescencia > característica de este tipo de
librerías). > > suerte, > Ale. > > > > > > ----- Original Message ----- > From: "kikote gregoris" < kikogregoris@... > > To: < smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject: [objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?.
> > Algo bien simple , una clase que contiene el metodo
> > int suma(int x , int y) . >
> > > Lo quiero hacer desde el MT . > > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo
Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular . Más información aquí.
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
El tema es que vas a tener que decidir donde hacer un "corte", por
ejemplo: usas el file i/o del framework ó usas los streams de St? Pero
el framework me da una rutina en C que lee archivos de 3ds max, por que
no la voy a usar?
La cagada es que como C++ no es un ambiente de objetos puede que tu
programa se haga dificil de debuggear y diseñar (C++ no es amigable
para la prueba y error... ni para el manejo de memoria :( ).
Por eso cuando se usa una librería C, se trata que la "logica" de mapeo
sea la minima posible, asi haces el 99% en St y en C te queda todo lo
que sea de "bajo nivel" (como hablar con el driver de video).
Esa "estrategia" simplifica mucho el desarrollo: como las rutinas de
mapeo en C son de bajo nivel podes testearlas bien las compilas una vez
y te olvidas de volver a C por mucho tiempo :) (incluso hasta los
malloc/free te conviene manejarlos en St)
Asi es como hacen muchos St para interactuar con el sistema operativo
(por ejemplo Squeak solo tiene implementado en la VM el BltBit el resto
del framework grafico esta en St, VAST usa el API de Windows para las
ventanas pero trata que ese mapeo sea minimo --SWT en Java hace lo
mismo--, VW tambien hace algo asi con la UI).
La verdad que no sé nada de formas automaticas de hacer esas cosas :( (tengo
entendido que habia una herramienta para VAST que leia archivos .h y
generaba la interfaz minima para comunicarse desde ST, tambien creo hay
algo parecido en VW con lo de CConect, pero nunca use ninguna de las
dos :(... y nunca use MT)
Con respecto a Nebula, tene en cuenta lo siguiente: Por lo poquito que vi de la documentacion, Nebula es un API de "alto" nivel. Es decir no hace solo rendering
3d con OpenGL si no que tambien modela muchas cosas para el manejo de esos "mundos" 3d. Esto
tiene una gran contra: vas a estar siempre luchando entre dos lenguajes
C++ y ST, ya que probablemente quieres tener este modelo de "mundos" en
ST :( Es mas recomendable utilizar C solo para cosas de "bajo" nivel
(por ej. el rendering con OpenGL) y modelar el resto en ST, te va a
hacer la vida más facil por que el mapeo con cosas en C de mas "bajo"
nivel lo podes hacer casi 1 a 1 (y probablemente en MT ya hay cosas
para usar OpenGL)
(quizas
lo que sigue es una explicación muy boluda de cosas que ya sabes, pero
que son nesarias para entender por que interactuar con C++ es más
complejo que interactuar con C)
Aunque tengas pocos
conocimientos de C/C++ ya sabes que este lenguaje (como muchos otros),
hace una diferencia grande entre "tiempo de desarrollo" (cuando
escribis el programa en formato texto) y "tiempo de ejecución" (cuando
el programa se interpreta en formato binario). En
esa traducción de texto a binario se divide en dos etapas: compilar
(traducir el texto a binario) y linkear (enlazar diferentes partes ya
compiladas del programa). Asi por ejemplo cuando escribis:
suma(2, 2);
Cuando
compilas se crea una referencia a la función suma que tiene una "firma"
particular: nombre la función + tipos de los parametros (en ingles es
signature, pero no sé si firma seria la traduccion correcta). Luego
el linker lo que hace es unir estas referencias, asi por ejemplo "suma"
se une con algo cuya firma seria: suma(int, int) (es por eso que aunque
la funcion suma este implementada en una librería y no estes compilando
el codigo fuente para suma, es necesario declarar la función, ver: http://en.wikipedia.org/wiki/Linker
)
Ahora... C++: C++ agrega dos caracteristicas: "objetos" y la posibilidad de declarar funciones con diferentes aridades, por ejemplo: suma(int, int); suma(long, long);
Para
distintiguir estas declaraciones el compilador lo que hace es codificar
la "firma" de las funciones (esto se llama name mangling, ver http://en.wikipedia.org/wiki/Name_mangling
). O sea suma en el archivo objeto puede convertirse en: suma_int_int suma_long_long
Este namemangling tambien se utilizar para diferenciar los metodos en un "objeto". Lo
del namemangling no representa mucha dificultad que digamos, es
cuestion de ver que nombre final tiene la función en la DLL (no se como
es en Windows pero en Unix/Linux se puede usar "nm" para ver los
simbolos que exporta un shared library).
Lo más complicado es que en C++ los objetos no son como en St, no hay una recepcion de mensajes. Cuando
se compila el compilador accede directamente a los metodos (la
direccion en memoria), a menos que se declare el metodo como "virtual",
en cuyo caso se accede al metodo mediante una tabla que apunta a la
direccion donde esta la implementacion del metodo (vtable).
Te estaras preguntando para que sirve saber todos estos detalles.
Cuando
haces una DLL se exportan ciertos simbolos para que estos puedan ser
accedidos mediante un linker ó "dinamicamente" mediante API para
manejar DLLs. El linker maneja automaticamente todo este problema
del namemangling, pero que pasa cuando accedes dinamicamente a las
funciones de la DLL? Ahi estas limitado al acceso que te da el API para DLLs (ver
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp) que nombre usas para acceder a la función si esta tiene "multiples firmas", ó si es un metodo? Y
si es un metodo "virtual"? Ahi ademas deberias conocer la estructura
interna que usa el compilador para representar los objetos y hacer el
lookup en el vtable.... En definitiva un quilombo!! (de nuevo este
quilombo lo resuelve el compilador de C++ cuando usas librerias en C++,
por eso tambien hay problemas de compatibilidad entre diferentes
compiladores de C++, esa la razón por la cual las APIs de los sistemas
operativos suelen estar escritas en C) Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas en C++: extern "C" int sumaInt(int a, int b) { return suma(a, b) }
extern "C" long sumaLong(long,
long) { ... }
El
extern "C" es para que cuando se genere la tabla de simbolos se
utilizen simbolos compatibles con las convenciones de C. A eso se
refiere Alejandro con hacer un wrapper. (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó TCL asi que debe tener wrappers de este tipo)
> Que es eso de hacer un wrappers
> intermedios en C ???.
Exponer
el conjunto de funciones para ser usadas desde C u otra plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si
son estructuras o componentes Cpuspus. De esta forma uno usa desde C la funcionalidad y no se complica con el uso de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es :
> Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C.
Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta
pronto, Ale.
----- Original Message ----- From: "kikote gregoris" <
kikogregoris@...> To: < smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM
Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar
todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en
st , lo cual sigo
pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome
la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como hacer la conexión con objetos c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que
los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso.
> > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace
solo >
en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" <
aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con > windows. > Fijate como se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda).
> > En un momento (hace casi 10 años) me toco hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para
comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y
> atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla
virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para
mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace
solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la obsolescencia > característica de este tipo de librerías). >
> suerte, > Ale. > > > > > > ----- Original Message ----- > From: "kikote gregoris" <
kikogregoris@... > > To: < smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject:
[objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?.
> > Algo bien simple , una clase que contiene el metodo
> > int suma(int x , int y) . > > > > Lo quiero hacer desde el MT .
> > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a
info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: >
http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: >
smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular
. Más información aquí.
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos.
Se sustenta gracias a la participación de sus socios.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo
Abrí tu cuenta aquí
Para más información sobre la
Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos.
Se sustenta gracias a la participación de sus socios.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos.
Se sustenta gracias a la participación de sus socios.
Que es lo que te hace pensar que nebula tiene características de alto nivel que me puedan complicar la vida ??.
Yo leí la documentación y sin ser un experto en ingles no encontré nada que me haga pensar en lo que comentas .
saludos kiko
Diego Fernandez <diegof79@...> escribió:
La verdad que no sé nada de formas automaticas de hacer esas cosas :( (tengo entendido que habia una herramienta para VAST que leia archivos .h y generaba la interfaz minima para comunicarse desde ST, tambien creo hay algo parecido en VW con lo de CConect, pero nunca use ninguna de las dos :(... y nunca use MT)
Con respecto a Nebula, tene en cuenta lo siguiente: Por lo poquito que vi de la documentacion, Nebula es un API de "alto" nivel. Es decir no hace solo rendering
3d con OpenGL si no que tambien modela muchas cosas para el manejo de esos "mundos" 3d. Esto tiene una gran contra: vas a estar siempre luchando entre dos lenguajes C++ y ST, ya que probablemente quieres tener este modelo de "mundos" en ST :( Es mas recomendable utilizar C solo para cosas de "bajo" nivel (por ej. el rendering con OpenGL) y modelar el resto en ST, te va a hacer la vida más facil por que el mapeo con cosas en C de mas "bajo" nivel lo podes hacer casi 1 a 1 (y probablemente en MT ya hay cosas para usar OpenGL)
(quizas lo que sigue es una explicación muy boluda de cosas que ya sabes, pero que son nesarias para entender por que interactuar con C++ es más complejo que interactuar con C)
Aunque tengas pocos conocimientos de C/C++ ya sabes que este lenguaje (como muchos
otros), hace una diferencia grande entre "tiempo de desarrollo" (cuando escribis el programa en formato texto) y "tiempo de ejecución" (cuando el programa se interpreta en formato binario). En esa traducción de texto a binario se divide en dos etapas: compilar (traducir el texto a binario) y linkear (enlazar diferentes partes ya compiladas del programa). Asi por ejemplo cuando escribis:
suma(2, 2);
Cuando compilas se crea una referencia a la función suma que tiene una "firma" particular: nombre la función + tipos de los parametros (en ingles es signature, pero no sé si firma seria la traduccion correcta). Luego el linker lo que hace es unir estas referencias, asi por ejemplo "suma" se une con algo cuya firma seria: suma(int, int) (es por eso que aunque la funcion suma este implementada en una librería y no estes compilando el codigo fuente para suma, es necesario declarar la función, ver: http://en.wikipedia.org/wiki/Linker)
Ahora... C++: C++ agrega dos caracteristicas: "objetos" y la posibilidad de declarar funciones con diferentes aridades, por ejemplo: suma(int, int); suma(long, long);
Para distintiguir estas declaraciones el compilador lo que hace es codificar la "firma" de las funciones (esto se llama name mangling, ver http://en.wikipedia.org/wiki/Name_mangling). O sea suma en el archivo objeto puede convertirse en: suma_int_int suma_long_long
Este namemangling tambien se utilizar para diferenciar los metodos en un "objeto". Lo del namemangling no representa mucha dificultad que digamos, es cuestion de ver que nombre final tiene la función en la DLL (no se como es en Windows pero en Unix/Linux se puede usar "nm" para ver los simbolos
que exporta un shared library).
Lo más complicado es que en C++ los objetos no son como en St, no hay una recepcion de mensajes. Cuando se compila el compilador accede directamente a los metodos (la direccion en memoria), a menos que se declare el metodo como "virtual", en cuyo caso se accede al metodo mediante una tabla que apunta a la direccion donde esta la implementacion del metodo (vtable).
Te estaras preguntando para que sirve saber todos estos detalles.
Cuando haces una DLL se exportan ciertos simbolos para que estos puedan ser accedidos mediante un linker ó "dinamicamente" mediante API para manejar DLLs. El linker maneja automaticamente todo este problema del namemangling, pero que pasa cuando accedes dinamicamente a las funciones de la DLL? Ahi estas limitado al acceso que te da el API para DLLs (ver http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp) que nombre usas para acceder a la función si esta tiene "multiples firmas", ó si es un metodo? Y si es un metodo "virtual"? Ahi ademas deberias conocer la estructura interna que usa el compilador para representar los objetos y hacer el lookup en el vtable.... En definitiva un quilombo!! (de nuevo este quilombo lo resuelve el compilador de C++ cuando usas librerias en C++, por eso tambien hay problemas de compatibilidad entre diferentes compiladores de C++, esa la razón por la cual las APIs de los sistemas operativos suelen estar escritas en C) Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas en C++: extern "C" int sumaInt(int a, int b) { return suma(a, b) } extern "C" long sumaLong(long,
long) { ... }
El extern "C" es para que cuando se genere la tabla de simbolos se utilizen simbolos compatibles con las convenciones de C. A eso se refiere Alejandro con hacer un wrapper. (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó TCL asi que debe tener wrappers de este tipo)
> Que es eso de hacer un wrappers > intermedios en C ???.
Exponer
el conjunto de funciones para ser usadas desde C u otra plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus. De esta forma uno usa desde C la funcionalidad y no se complica con el uso de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta
pronto, Ale.
----- Original Message ----- From: "kikote gregoris" < kikogregoris@...> To: < smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo
pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como hacer la conexión con objetos c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo >
en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" < aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con > windows. > Fijate como se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para
comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para
mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la obsolescencia > característica de este tipo de librerías). > > suerte, > Ale. > > > > > > ----- Original Message ----- > From: "kikote gregoris" < kikogregoris@... > > To: < smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject:
[objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?.
> > Algo bien simple , una clase que contiene el metodo
> > int suma(int x , int y) . > > > > Lo quiero hacer desde el MT . > > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. Más información aquí.
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Para más información sobre la
Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
Lista:
Ante q nada gracias por su ayuda, respuestas y
recomendaciones anteriores.
Acá vuelvo bombardeando una serie de dudas q me han
quedado después de experimentar con los objetos
Gráficos de DOLPHIN 5.
1. Como puedo hacer para agregar una caption a una
shell cualquiera. La defino en el view composer, pero
cuando invoco al método show para verla me aparece
como no definida “Untitled”.
2. Como hago para poder concatenar dos string en uno
sola.
3. Como hago para mostrar un valor como predefinido en
un combo box. Especifico el modelo (una Ordered
Collection) pero como hago para que uno de los objetos
aparezca como predefinido en la pantalla.
4. Como hago para manejar gráficos estadísticos,
necesito saber si hay alguna clase q lo haga y si es
posible me gustaría ver un ejemplo.
5. Existe alguna clase que maneje ecuaciones
diferenciales. Tuve q cargar
“manualmente”, un mensaje q lo soportará
mediante un método numérico, me gustaría saber si
existe alguna en el enorme ambiente que viene en la
imagen, para poder obtener resultados mas exactos.
Gracias de nuevo por las respuestas anteriores. Y
esperando que me saquen algunas de estas dudas.
___________________________________________________________
1GB gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar
Hola, como ya les había comentado antes, estoy haciendo un trabajo en VisualWorks. Y ahora estoy con un pequeño problema.
Tengo una clase mapa dando vueltas y es una representación de un mapa =P. El mapa tiene adentro una matriz y cada componente de la misma es un tipo de contenido. Lo que yo quiero hacer es: tomar/crear un mapa cualquiera, y que una GUI me lo muestre. Creo que ahora hay 2 tipos de celdas, la idea sería que me muestre negro o rojo dependiendo del contenido de la celda.
El tema es que en VW no sé que elemento del canvas tengo que utilizar para empezar a ver. Si alguien me da una punta estaré agradecido.
La verdad que no sé nada de formas automaticas de hacer esas cosas :( (tengo entendido que habia una herramienta para VAST que leia archivos .h y generaba la interfaz minima para comunicarse desde ST, tambien creo hay algo parecido en VW con lo de CConect, pero nunca use ninguna de las dos :(... y nunca use MT)
Con respecto a Nebula, tene en cuenta lo siguiente: Por lo poquito que vi de la documentacion, Nebula es un API de "alto" nivel. Es decir no hace solo rendering 3d con OpenGL si no que tambien modela muchas cosas para el manejo de esos "mundos" 3d.
Esto tiene una gran contra: vas a estar siempre luchando entre dos lenguajes C++ y ST, ya que probablemente quieres tener este modelo de "mundos" en ST :( Es mas recomendable utilizar C solo para cosas de "bajo" nivel (por ej. el rendering con OpenGL) y modelar el resto en ST, te va a hacer la vida más facil por que el mapeo con cosas en C de mas "bajo" nivel lo podes hacer casi 1 a 1 (y probablemente en MT ya hay cosas para usar OpenGL)
(quizas lo que sigue es una explicación muy boluda de cosas que ya sabes, pero que son nesarias para entender por que interactuar con C++ es más complejo que interactuar con C)
Aunque tengas pocos conocimientos de C/C++ ya sabes que este lenguaje (como muchos otros), hace una diferencia grande entre "tiempo de desarrollo" (cuando
escribis el programa en formato texto) y "tiempo de ejecución" (cuando el programa se interpreta en formato binario). En esa traducción de texto a binario se divide en dos etapas: compilar (traducir el texto a binario) y linkear (enlazar diferentes partes ya compiladas del programa). Asi por ejemplo cuando escribis:
suma(2, 2);
Cuando compilas se crea una referencia a la función suma que tiene una "firma" particular: nombre la función + tipos de los parametros (en ingles es signature, pero no sé si firma seria la traduccion correcta). Luego el linker lo que hace es unir estas referencias, asi por ejemplo "suma" se une con algo cuya firma seria: suma(int, int) (es por eso que aunque la funcion suma este implementada en una librería y no estes compilando el codigo fuente para suma, es necesario declarar la función, ver: http://en.wikipedia.org/wiki/Linker)
Ahora... C++: C++ agrega dos caracteristicas:
"objetos" y la posibilidad de declarar funciones con diferentes aridades, por ejemplo: suma(int, int); suma(long, long);
Para distintiguir estas declaraciones el compilador lo que hace es codificar la "firma" de las funciones (esto se llama name mangling, ver http://en.wikipedia.org/wiki/Name_mangling). O sea suma en el archivo objeto puede convertirse en: suma_int_int suma_long_long
Este namemangling tambien se utilizar para diferenciar los metodos en un "objeto". Lo del namemangling no representa mucha dificultad que digamos, es cuestion de ver que nombre final tiene la función en la DLL (no se como es en Windows pero en Unix/Linux se puede usar "nm" para ver los simbolos que exporta un shared library).
Lo más complicado es que en C++ los objetos no son como en St, no hay una recepcion de mensajes. Cuando se compila el compilador accede directamente a los metodos (la direccion en
memoria), a menos que se declare el metodo como "virtual", en cuyo caso se accede al metodo mediante una tabla que apunta a la direccion donde esta la implementacion del metodo (vtable).
Te estaras preguntando para que sirve saber todos estos detalles.
Cuando haces una DLL se exportan ciertos simbolos para que estos puedan ser accedidos mediante un linker ó "dinamicamente" mediante API para manejar DLLs. El linker maneja automaticamente todo este problema del namemangling, pero que pasa cuando accedes dinamicamente a las funciones de la DLL? Ahi estas limitado al acceso que te da el API para DLLs (ver
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp) que nombre usas para acceder a la función si esta tiene "multiples firmas", ó si es un metodo? Y si es un metodo "virtual"? Ahi ademas deberias
conocer la estructura interna que usa el compilador para representar los objetos y hacer el lookup en el vtable.... En definitiva un quilombo!! (de nuevo este quilombo lo resuelve el compilador de C++ cuando usas librerias en C++, por eso tambien hay problemas de compatibilidad entre diferentes compiladores de C++, esa la razón por la cual las APIs de los sistemas operativos suelen estar escritas en C) Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas en C++: extern "C" int sumaInt(int a, int b) { return suma(a, b) } extern "C" long sumaLong(long, long) { ... }
El extern "C" es para que cuando se genere la tabla de simbolos se utilizen simbolos compatibles con las convenciones de C. A eso se refiere Alejandro con hacer un wrapper. (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó TCL asi que debe tener wrappers de este tipo)
> Que es eso de hacer un wrappers
> intermedios en C ???.
Exponer el conjunto de funciones para ser usadas desde C u otra plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar
a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus. De esta forma uno usa desde C la funcionalidad y no se complica con el uso
de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal
menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris" <
kikogregoris@...> To: <
smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como
hacer la conexión con objetos c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos.
> En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es :
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" <
aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy
transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con > windows. > Fijate como se accede a objetos COM y seguramente allí tendrás guías de
como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene
VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica
> (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la dirección de las funciones encontradas en la tabla
virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de
recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la
obsolescencia > característica de este tipo de librerías). > > suerte, > Ale. > > > > > > ----- Original Message ----- > From: "kikote gregoris" <
kikogregoris@... > > To: <
smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject: [objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un
> objeto c++ ?.
> > Algo bien simple , una clase que contiene el metodo
>
> int suma(int x , int y) . > > > > Lo quiero hacer desde el MT . > > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a
info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm > > > > > ---------------------------------
> Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: >
http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: >
smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > ---------------------------------
> 1GB gratis, Antivirus y Antispam > Correo
Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. Más información
aquí.
Para más información sobre la Asociación escribir a
info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos.
Se sustenta gracias a la participación de sus socios.
Muy buena la explicación , la verdad es que no tenia idea de todo este quilombo.
Voy a investigar un poco mas la cuestión , para que me quede bien claro.
Sobre nebula es cierto que tiene como vos decís "bindings" para usar con phyton , lua (que no se que carajo es) , rubi y tcl.
Alejandro decía que había una manera media automática para hacer estas cosas , sabes algo sobre eso.??
Diego Fernandez <diegof79@...> escribió:
(quizas lo que sigue es una explicación muy boluda de cosas que ya sabes, pero que son nesarias para entender por que interactuar con C++ es más complejo que interactuar con C)
Aunque tengas pocos conocimientos de C/C++ ya sabes que este lenguaje (como muchos otros), hace una diferencia grande entre "tiempo de desarrollo" (cuando
escribis el programa en formato texto) y "tiempo de ejecución" (cuando el programa se interpreta en formato binario). En esa traducción de texto a binario se divide en dos etapas: compilar (traducir el texto a binario) y linkear (enlazar diferentes partes ya compiladas del programa). Asi por ejemplo cuando escribis:
suma(2, 2);
Cuando compilas se crea una referencia a la función suma que tiene una "firma" particular: nombre la función + tipos de los parametros (en ingles es signature, pero no sé si firma seria la traduccion correcta). Luego el linker lo que hace es unir estas referencias, asi por ejemplo "suma" se une con algo cuya firma seria: suma(int, int) (es por eso que aunque la funcion suma este implementada en una librería y no estes compilando el codigo fuente para suma, es necesario declarar la función, ver: http://en.wikipedia.org/wiki/Linker)
Ahora... C++: C++ agrega dos caracteristicas:
"objetos" y la posibilidad de declarar funciones con diferentes aridades, por ejemplo: suma(int, int); suma(long, long);
Para distintiguir estas declaraciones el compilador lo que hace es codificar la "firma" de las funciones (esto se llama name mangling, ver http://en.wikipedia.org/wiki/Name_mangling). O sea suma en el archivo objeto puede convertirse en: suma_int_int suma_long_long
Este namemangling tambien se utilizar para diferenciar los metodos en un "objeto". Lo del namemangling no representa mucha dificultad que digamos, es cuestion de ver que nombre final tiene la función en la DLL (no se como es en Windows pero en Unix/Linux se puede usar "nm" para ver los simbolos que exporta un shared library).
Lo más complicado es que en C++ los objetos no son como en St, no hay una recepcion de mensajes. Cuando se compila el compilador accede directamente a los metodos (la direccion en
memoria), a menos que se declare el metodo como "virtual", en cuyo caso se accede al metodo mediante una tabla que apunta a la direccion donde esta la implementacion del metodo (vtable).
Te estaras preguntando para que sirve saber todos estos detalles.
Cuando haces una DLL se exportan ciertos simbolos para que estos puedan ser accedidos mediante un linker ó "dinamicamente" mediante API para manejar DLLs. El linker maneja automaticamente todo este problema del namemangling, pero que pasa cuando accedes dinamicamente a las funciones de la DLL? Ahi estas limitado al acceso que te da el API para DLLs (ver http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp) que nombre usas para acceder a la función si esta tiene "multiples firmas", ó si es un metodo? Y si es un metodo "virtual"? Ahi ademas deberias
conocer la estructura interna que usa el compilador para representar los objetos y hacer el lookup en el vtable.... En definitiva un quilombo!! (de nuevo este quilombo lo resuelve el compilador de C++ cuando usas librerias en C++, por eso tambien hay problemas de compatibilidad entre diferentes compiladores de C++, esa la razón por la cual las APIs de los sistemas operativos suelen estar escritas en C) Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas en C++: extern "C" int sumaInt(int a, int b) { return suma(a, b) } extern "C" long sumaLong(long, long) { ... }
El extern "C" es para que cuando se genere la tabla de simbolos se utilizen simbolos compatibles con las convenciones de C. A eso se refiere Alejandro con hacer un wrapper. (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó TCL asi que debe tener wrappers de este tipo)
> Que es eso de hacer un wrappers > intermedios en C ???.
Exponer el conjunto de funciones para ser usadas desde C u otra plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus. De esta forma uno usa desde C la funcionalidad y no se complica con el uso
de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris" <kikogregoris@...> To: <
smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como
hacer la conexión con objetos c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" < aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy
transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con > windows. > Fijate como se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene
VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la
obsolescencia > característica de este tipo de librerías). > > suerte, > Ale. > > > > > > ----- Original Message ----- > From: "kikote gregoris" <kikogregoris@... > > To: <smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject: [objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?.
> > Algo bien simple , una clase que contiene el metodo
>
> int suma(int x , int y) . > > > > Lo quiero hacer desde el MT . > > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo
Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. Más información aquí.
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. Se sustenta gracias a la participación de sus socios.
Diego Fernandez escribió:
> (quizas lo que sigue es una explicación muy boluda de cosas que ya
> sabes, pero que son nesarias para entender por que interactuar con C++
> es más complejo que interactuar con C)
Diego, muy buena tu explicación. Gracias.
--
Esteban
(quizas lo que sigue es una explicación muy boluda de cosas que ya sabes, pero que son nesarias para entender por que interactuar con C++ es más complejo que interactuar con C)
Aunque tengas pocos conocimientos de C/C++ ya sabes que este lenguaje (como muchos otros), hace una diferencia grande entre "tiempo de desarrollo" (cuando escribis el programa en formato texto) y "tiempo de ejecución" (cuando el programa se interpreta en formato binario).
En esa traducción de texto a binario se divide en dos etapas: compilar (traducir el texto a binario) y linkear (enlazar diferentes partes ya compiladas del programa). Asi por ejemplo cuando escribis:
suma(2, 2);
Cuando compilas se crea una referencia a la función suma que tiene una "firma" particular: nombre la función + tipos de los parametros (en ingles es signature, pero no sé si firma seria la traduccion correcta).
Luego el linker lo que hace es unir estas referencias, asi por ejemplo "suma" se une con algo cuya firma seria: suma(int, int) (es por eso que aunque la funcion suma este implementada en una librería y no estes compilando el codigo fuente para suma, es necesario declarar la función, ver: http://en.wikipedia.org/wiki/Linker)
Ahora... C++: C++ agrega dos caracteristicas: "objetos" y la posibilidad de declarar funciones con diferentes aridades, por ejemplo:
suma(int, int); suma(long, long);
Para distintiguir estas declaraciones el compilador lo que hace es codificar la "firma" de las funciones (esto se llama name mangling, ver
http://en.wikipedia.org/wiki/Name_mangling). O sea suma en el archivo objeto puede convertirse en: suma_int_int suma_long_long
Este namemangling tambien se utilizar para diferenciar los metodos en un "objeto".
Lo del namemangling no representa mucha dificultad que digamos, es cuestion de ver que nombre final tiene la función en la DLL (no se como es en Windows pero en Unix/Linux se puede usar "nm" para ver los simbolos que exporta un shared library).
Lo más complicado es que en C++ los objetos no son como en St, no hay una recepcion de mensajes. Cuando se compila el compilador accede directamente a los metodos (la direccion en memoria), a menos que se declare el metodo como "virtual", en cuyo caso se accede al metodo mediante una tabla que apunta a la direccion donde esta la implementacion del metodo (vtable).
Te estaras preguntando para que sirve saber todos estos detalles.
Cuando haces una DLL se exportan ciertos simbolos para que estos puedan ser accedidos mediante un linker ó "dinamicamente" mediante API para manejar DLLs.
El linker maneja automaticamente todo este problema del namemangling, pero que pasa cuando accedes dinamicamente a las funciones de la DLL? Ahi estas limitado al acceso que te da el API para DLLs (ver
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp) que nombre usas para acceder a la función si esta tiene "multiples firmas", ó si es un metodo? Y si es un metodo "virtual"? Ahi ademas deberias conocer la estructura interna que usa el compilador para representar los objetos y hacer el lookup en el vtable.... En definitiva un quilombo!!
(de nuevo este quilombo lo resuelve el compilador de C++ cuando usas librerias en C++, por eso tambien hay problemas de compatibilidad entre diferentes compiladores de C++, esa la razón por la cual las APIs de los sistemas operativos suelen estar escritas en C)
Por eso es mucho más facil hacer el "wrapper" en C, por ejemplo si estas en C++: extern "C" int sumaInt(int a, int b) { return suma(a, b) } extern "C" long sumaLong(long, long) { ... }
El extern "C" es para que cuando se genere la tabla de simbolos se utilizen simbolos compatibles con las convenciones de C. A eso se refiere Alejandro con hacer un wrapper. (si no me equivoco Nebula tiene "bindings" para ser utilizado con Python ó TCL asi que debe tener wrappers de este tipo)
> Que es eso de hacer un wrappers > intermedios en C ???.
Exponer el conjunto de funciones para ser usadas desde C u otra
plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus.
De esta forma uno usa desde C la funcionalidad y no se complica con el uso de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien
> expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma
de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris"
<kikogregoris@...> To: <
smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que
esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/
> > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando
con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como hacer la conexión con objetos
c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil , ya que hay todo un
mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace
solo > en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" <
aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con
> windows. > Fijate como
se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco hacer una conexión como la que
te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece.
> En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar
al > que tiene VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la
tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le
> pichicateaba la dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers
> intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que
> evalúes si podes evitar usarlo (para no heredar la obsolescencia > característica de este tipo de librerías). > > suerte, > Ale. > > > > > >
----- Original Message ----- > From: "kikote gregoris" <kikogregoris@...
> > To: <smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM
> Subject: [objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?.
> > Algo bien simple , una clase que contiene el metodo
> > int suma(int x , int y) . > > > > Lo quiero hacer desde el MT .
> > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a
info@... > > Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!. > > > > >
--------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. Más información aquí.
Para más información sobre la Asociación escribir a info@...
Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos.
Se sustenta gracias a la participación de sus socios.
Hola,
Si uno usa herramientas que solo permiten trabajar
Orientado a Objetos (y hacer diseño OO),
no hay posibilidad de distinguir entre componente
y objeto; y la única forma de diseño que parece
(y es) posible es el diseñar arquitecturas
con elementos intercambiables (componentes).
La oportunidad de participar de emprendimientos
dónde se use un ambiente (y se use no
solo de forma OO) es lo que va dejando más en
claro, con el tiempo y el uso, las diferencias.
El participar en esta lista, permite enterarnos
de que hay más formas de desarrollo (de sistemas
y personales), que las que se habla comúnmente en
las universidades, los libros, artículos de Internet, etc.
Pero el participar de esta lista no permite mucho
más que el enterarse o el "poder hablar del tema"
(nutrirse de terminología) para repetir como un loro :-)
o, peor aún, para criticar (en otros lugares) lo que decimos acá.
Que se puede hacer y dónde para desarrollarse en estos temas?
O al menos entender un poco mejor de que se trata?
1.- realizar actividades de desarrollo. Por ejemplo, participar
de desarrollos y proyectos en los que se conozca participan
personas con conocimiento del tema (al decir, conocimiento
del tema, no me refiero a "estudio del tema", sino a desarrollo
personal) [**]
2.- participar de eventos y emprendimientos cortos (de los
que hemos hecho muy pocos en este último tiempo, por
falta de interés por parte de quienes aquí estamos subscriptos)
Que NO es recomendable hacer?
1.- solo escuchar lo que yo digo y sentarse a "reflexionar"
sobre mis palabras (es injusto para conmigo).
Solo una recomendación mas... sobre cómo escuchar
los comentarios de otras personas (profesionales y no
tanto) :
Al escuchar sus palabras (aunque suenen técnicas),
pregúntense:
- desde que posición habla? (es decir, que ha hecho en
el tema y para que estos temas se desarrollen de
forma pública y civilizada)
- que interés tiene al hablar del tema?
Seguramente estas, son cosas que todos nosotros tenemos
en cuenta; pero deseo comentarlas, pues he visto que a
menudo se pasan por alto y se analiza
solamente el texto (las palabras) como si estas no
estuvieran relacionadas con quien las dice. [*]
No se si con esto respondí a tus inquietudes;
espero al menos haber dejado en claro cómo
creo que podrías hacer para que no sigan existiendo;
y no perder esta oportunidad que te dá el saber
que podés hacer una diferencia entre esos términos.
hasta pronto,
Ale.
[*] En los temas de fé, sociales e incluso en los más
técnicos, la utilidad de una frase (por ejemplo el distinguir
entre que es un objeto y que no) esta directamente relacionada
con el que la formula, luego con quien la escucha y por
último, con su contenido. :-) no?
[**] Aquí hay implícita una problemática de huevo y gallina;
pues uno no puede evaluar la experiencia de alguien,
en un tema dónde no hay muchas oportunidades de
calificación relativa (es algo muy frecuente que la gente
se disocia, para no poder ser evaluadas sus acciones,
o que se disuelva en pseudo problemas personales
simulados la falta de compromiso).
----- Original Message -----
From: "kikote gregoris" <kikogregoris@...>
To: <smalltalking@...>
Sent: Friday, March 10, 2006 5:06 PM
Subject: Re: [objetos] Objetos C++ con ST
> Hola ale
>
> En un articulo tuyo explicas las diferencias entre un objeto ST y un
componente , el echo es que estoy confundido ya que en algunos lugares
llaman componentes a las componetes visuales que se pueden pegar en un
formulario , como en delphy o c++ builder y no aclaran bien que es ubjeto y
que no lo es.
>
> saludos kiko
>
> "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> Hola,
>
> > Cual es la estructura de un objeto C++
>
> Ninguna. En C++ no se puede trabajar con objetos.
> En C++ u otro LOO se puede ambicionar como
> máximo el trabajar OO; es decir, con componentes.
> Varias veces tocamos estos temas en la lista (lo digo,
> por si deseas releer mails históricos :-)
>
> > y que lo diferencia con un ST,
>
> En el caso particular de Smalltalk/MT, donde el
> compilador es estático, es posible que el compilador
> pueda generar estructuras incluso compatibles.
> Si es así, lo mas conveniente es leer la documentación
> del MT y si no... leer la documentación de tu
> plataforma Cpuspus.
>
> hasta pronto,
> Ale.
>
> ----- Original Message -----
> From: "kikote gregoris" <kikogregoris@...>
> To: <smalltalking@...>
> Sent: Thursday, March 09, 2006 5:51 PM
> Subject: Re: [objetos] Objetos C++ con ST
>
>
> > Hola ALe
> >
> > Cual es la estructura de un objeto C++ y que lo diferencia con un ST,
> > En los manuales de MT hay un esquema que muestra al objeto ST con una
> direccion basica seguida de la direccion de los campos y luego un puntero
a
> un diccionario de metodos .
> >
> >
> > saludos kiko
> >
> > "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> > Hola,
> >
> > > Que es eso de hacer un wrappers
> > > intermedios en C ???.
> >
> > Exponer el conjunto de funciones para ser
> > usadas desde C u otra plataforma por medios
> > tradicionales.
> > Normalmente, los componentes de la librería se
> > ven como punteros que son vueltos a pasar
> > a la librería (que los genera) sin importar si
> > son estructuras o componentes Cpuspus.
> > De esta forma uno usa desde C la funcionalidad
> > y no se complica con el uso de componentes
> > e interfaces altamente fraccionadas.
> >
> > > Otra cosa que no entendí es :
> > > Hoy en día es muy raro encontrar que quien
> > > expone una librería lo hace solo
> > > en C++ (y no expone una API);
> >
> > Normalmente quien hace una librería expone
> > una API para ser usada desde C.
> > Exponer componentes, en el caso de C++ (y
> > otros LOOs) te fuerza a usar la misma plataforma
> > de desarrollo del autor (lo que sería un mal
> > menor, al compararlo frente a lo que implica usar
> > sus componentes :-P ).
> >
> > suerte con Nebula2,
> > hasta pronto,
> > Ale.
> >
> >
> >
> >
> > ----- Original Message -----
> > From: "kikote gregoris" <kikogregoris@...>
> > To: <smalltalking@...>
> > Sent: Wednesday, March 08, 2006 4:54 PM
> > Subject: Re: [objetos] Objetos C++ con ST
> >
> >
> > > Hola Ale
> > >
> > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 ,
que
> > esta desarrollado enteramente en C++, el motor es Free y se puden bajar
> > todos los fuentes http://nebuladevice.cubik.org/
> > >
> > > En algún momento pregunte si era conveniente el desarrollar un
engine
> en
> > st , lo cual sigo pensando que seria la mejor solución .El problema es
que
> > esto me aleja de mi objetivo primario que es desarrollar un game ,
> charlando
> > con los desarrolladores de games de junin Oniric , me recomendaron que
> tome
> > la alternativa mas corta pues ellos tomaron la mas larga y no me lo
> > recomendaron para empezar.
> > >
> > > Es por eso que quería saber como hacer la conexión con objetos c++,
> vos
> > decís que es parecido a lo que se hace con objetos COM , tengo entendido
> que
> > los COM y los C++ son compatibles a nivel binario nada mas , cual es la
> > diferencia entre ambos.
> > > En MT la comunicación con COM es bastante fácil , ya que hay todo un
> > mecanismo bien definido para tal caso.
> > >
> > > Que es eso de hacer un wrappers
> > > intermedios en C ???.
> > >
> > > Otra cosa que no entendi es :
> > >
> > > Hoy en día es muy raro encontrar que quien expone una librería lo
hace
> > solo
> > > en C++ (y no expone una API);
> > >
> > > saludos kiko
> > >
> > >
> > >
> > > "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> > > kiko,
> > >
> > > Seguramente en MT tenes una opción muy transparente para usar
elementos
> de
> > > C++... pues el compilador es estático y preparado para integrarse bien
> con
> > > windows.
> > > Fijate como se accede a objetos COM y seguramente allí tendrás guías
de
> > como
> > > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios
> del
> > MT
> > > para ser bien asistido en esta duda).
> > >
> > > En un momento (hace casi 10 años) me toco hacer una conexión como la
que
> > te
> > > estás planteando (con un Smalltalk mío) para acceder a rutinas de
> > compresión
> > > por fractales (algo que estaba por "ponerse de moda" para comprimir
> > > imágenes, en ese entonces).
> > > El usar objetos C++ es algo menos frecuente de lo que parece.
> > > En ese momento lo que hice fue definir los métodos que tenia la DLL
como
> > api
> > > calls (buscando la dirección del binding con el nombre mangleado y
> > > atachandoselo al método Smalltalk explícitamente), con un diseño
similar
> > al
> > > que tiene VS.
> > > Así accedía a las funciones de instanciación del objeto C++.
> > > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla
> > virtual
> > > y mapeaba la estructura del objeto cpuspus a una estructura dinámica
> > > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk
> > > mapeando la tabla virtual con métodos definidos como API y a los que
le
> > > pichicateaba la dirección de las funciones encontradas en la tabla
> > virtual.
> > >
> > > Como te imaginarás todo funcionaba de maravillas... pero luego de
> hacerlo
> > > (cosa indispensable para mantener mi sanidad y no tener que hacer
> wrappers
> > > intermedios en C) llegue a la conclusión que no era algo digno de
> > recomendar
> > > :-)
> > >
> > > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> > solo
> > > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría
> que
> > > evalúes si podes evitar usarlo (para no heredar la obsolescencia
> > > característica de este tipo de librerías).
> > >
> > > suerte,
> > > Ale.
> > >
> > >
> > >
> > >
> > >
> > > ----- Original Message -----
> > > From: "kikote gregoris" <kikogregoris@...>
> > > To: <smalltalking@...>
> > > Sent: Monday, March 06, 2006 4:52 PM
> > > Subject: [objetos] Objetos C++ con ST
> > >
> > >
> > > > Hola gente
> > > >
> > > > Queira saber como se puede interactuar con una dll que contiene un
> > > objeto c++ ?.
> > > > Algo bien simple , una clase que contiene el metodo
> > > > int suma(int x , int y) .
> > > >
> > > > Lo quiero hacer desde el MT .
> > > >
> > > > saludos kiko
> > > >
> > > >
> > > > ---------------------------------
> > > > 1GB gratis, Antivirus y Antispam
> > > > Correo Yahoo!, el mejor correo web del mundo
> > > > Abrí tu cuenta aquí
> > >
> > >
> > >
> > > Para más información sobre la Asociación escribir a
> info@...
> > >
> > > Smalltalking es un espacio colaborativo creado para el estudio y
> > desarrollo en Ambientes de Objetos.
> > > Se sustenta gracias a la participación de sus socios.
> > >
> > > Las reglas de etiqueta sobre la lista están en
> > http://www.smalltalking.net/join/netiquete.htm
> > >
> > >
> > >
> > >
> > > ---------------------------------
> > > Enlaces de Yahoo! Grupos
> > >
> > > Para visitar el sitio web del grupo, andá a:
> > > http://ar.groups.yahoo.com/group/smalltalking/
> > >
> > > Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> > > smalltalking-unsubscribe@...
> > >
> > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio
de
> > Yahoo!.
> > >
> > >
> > >
> > >
> > > ---------------------------------
> > > 1GB gratis, Antivirus y Antispam
> > > Correo Yahoo!, el mejor correo web del mundo
> > > Abrí tu cuenta aquí
> >
> >
> >
> > Para más información sobre la Asociación escribir a
info@...
> >
> > Smalltalking es un espacio colaborativo creado para el estudio y
> desarrollo en Ambientes de Objetos.
> > Se sustenta gracias a la participación de sus socios.
> >
> > Las reglas de etiqueta sobre la lista están en
> http://www.smalltalking.net/join/netiquete.htm
> >
> >
> >
> >
> > ---------------------------------
> > Enlaces de Yahoo! Grupos
> >
> > Para visitar el sitio web del grupo, andá a:
> > http://ar.groups.yahoo.com/group/smalltalking/
> >
> > Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> > smalltalking-unsubscribe@...
> >
> > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
> Yahoo!.
> >
> >
> >
> >
> > ---------------------------------
> > 1GB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí
>
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
> ---------------------------------
> Horóscopos, Salud y belleza, Chistes, Consejos de amor.
> El contenido más divertido para tu celular está en
> Yahoo! Móvil
Estas diciendo que se me va a complicar trabajando con este engine ???.
La eleccion del mismo es por que es free y no encontre otra alternativa free para outdoor.
saludos kiko
"Alejandro F. Reimondo" <aleReimondo@...> escribió:
Hola kiko,
> Los fuentes estan para hacer lo que uno quiere , no hay una DLL echa . > Con respecto a exponer un API , podrías decirme como hacer > esto con algun ejemplo bien pabo, si no te jode .
Hace una DLL que use la librería y expone una funcion API por cada funcionalidad que desees usar. Creo que hay herrameinats que automatizan (al menos parcialmente) esa labor.
> Otra cosa que quiere decir: > De esta forma uno
usa desde C la funcionalidad > y no se complica con el uso de componentes > e interfaces altamente fraccionadas
Por lo general como producir usando un lenguaje de bajo nivel, como C++ es muy costoso; acostumbra a pasar que quedan en el olvido, o fuera de las posibilidades del desarrollo; el realizar un gran unmero de ciclos antes de publicar una interfáz.
Esto tiene como efecto posterior,: 1.- por lo general no se preservan las interfaces entre versiones de una librería; sino que cada programa que las usa se adapta bajo costos de quien la usa. (esto es consistente con la forma en que se acostumbra a producir con LOOs, en términos generales... aunque hay alguna excepcion) 2.- por lo general se expone hasta el mas minimo detalle de funcionalidad; sin poder evaluar el costo que esto implica a futuro.
Trabajando en un ambiente de forma adecuada, no se observan estos efectos.
hasta pronto Ale.
-----
Original Message ----- From: "kikote gregoris" <kikogregoris@...> To: <smalltalking@...> Sent: Thursday, March 09, 2006 5:25 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola ALe > > > Los fuentes estan para hacer lo que uno quiere , no hay una DLL echa . > Con respecto a exponer un API , podrías decirme como hacer esto con algun ejemplo bien pabo, si no te jode . > Mi conocimiento sobre C y C++ es escaso. > > Otra cosa que quiere decir: > > De esta forma uno usa desde C la funcionalidad > y no se complica con el uso de componentes > e interfaces altamente fraccionadas > > saludos kiko > > "Alejandro F. Reimondo" <aleReimondo@...> escribió: > Hola, > > > Que es eso de hacer un wrappers >
> intermedios en C ???. > > Exponer el conjunto de funciones para ser > usadas desde C u otra plataforma por medios > tradicionales. > Normalmente, los componentes de la librería se > ven como punteros que son vueltos a pasar > a la librería (que los genera) sin importar si > son estructuras o componentes Cpuspus. > De esta forma uno usa desde C la funcionalidad > y no se complica con el uso de componentes > e interfaces altamente fraccionadas. > > > Otra cosa que no entendí es : > > Hoy en día es muy raro encontrar que quien > > expone una librería lo hace solo > > en C++ (y no expone una API); > > Normalmente quien hace una librería expone > una API para ser usada desde C. > Exponer componentes, en el caso de C++ (y > otros LOOs) te fuerza a usar la misma plataforma > de desarrollo del autor (lo que sería un
mal > menor, al compararlo frente a lo que implica usar > sus componentes :-P ). > > suerte con Nebula2, > hasta pronto, > Ale. > > > > > ----- Original Message ----- > From: "kikote gregoris" <kikogregoris@...> > To: <smalltalking@...> > Sent: Wednesday, March 08, 2006 4:54 PM > Subject: Re: [objetos] Objetos C++ con ST > > > > Hola Ale > > > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que > esta desarrollado enteramente en C++, el motor es Free y se puden bajar > todos los fuentes http://nebuladevice.cubik.org/ > > > > En algún momento pregunte si era conveniente el desarrollar un engine en > st , lo cual sigo pensando que seria la mejor solución .El problema es que > esto me aleja
de mi objetivo primario que es desarrollar un game , charlando > con los desarrolladores de games de junin Oniric , me recomendaron que tome > la alternativa mas corta pues ellos tomaron la mas larga y no me lo > recomendaron para empezar. > > > > Es por eso que quería saber como hacer la conexión con objetos c++, vos > decís que es parecido a lo que se hace con objetos COM , tengo entendido que > los COM y los C++ son compatibles a nivel binario nada mas , cual es la > diferencia entre ambos. > > En MT la comunicación con COM es bastante fácil , ya que hay todo un > mecanismo bien definido para tal caso. > > > > Que es eso de hacer un wrappers > > intermedios en C ???. > > > > Otra cosa que no entendi es : > > > > Hoy en día es muy raro encontrar que quien expone una librería lo
hace > solo > > en C++ (y no expone una API); > > > > saludos kiko > > > > > > > > "Alejandro F. Reimondo" <aleReimondo@...> escribió: > > kiko, > > > > Seguramente en MT tenes una opción muy transparente para usar elementos de > > C++... pues el compilador es estático y preparado para integrarse bien con > > windows. > > Fijate como se accede a objetos COM y seguramente allí tendrás guías de > como > > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del > MT > > para ser bien asistido en esta duda). > > > > En un momento (hace casi 10 años) me toco hacer una conexión como la que > te > > estás planteando (con un Smalltalk mío) para acceder a rutinas de > compresión > > por fractales (algo que estaba por "ponerse
de moda" para comprimir > > imágenes, en ese entonces). > > El usar objetos C++ es algo menos frecuente de lo que parece. > > En ese momento lo que hice fue definir los métodos que tenia la DLL como > api > > calls (buscando la dirección del binding con el nombre mangleado y > > atachandoselo al método Smalltalk explícitamente), con un diseño similar > al > > que tiene VS. > > Así accedía a las funciones de instanciación del objeto C++. > > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla > virtual > > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > > mapeando la tabla virtual con métodos definidos como API y a los que le > > pichicateaba la dirección de las funciones encontradas en la tabla > virtual. > > > > Como te
imaginarás todo funcionaba de maravillas... pero luego de hacerlo > > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > > intermedios en C) llegue a la conclusión que no era algo digno de > recomendar > > :-) > > > > Hoy en día es muy raro encontrar que quien expone una librería lo hace > solo > > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > > evalúes si podes evitar usarlo (para no heredar la obsolescencia > > característica de este tipo de librerías). > > > > suerte, > > Ale. > > > > > > > > > > > > ----- Original Message ----- > > From: "kikote gregoris" <kikogregoris@...> > > To: <smalltalking@...> > > Sent: Monday, March 06, 2006 4:52 PM > > Subject: [objetos] Objetos C++ con
ST > > > > > > > Hola gente > > > > > > Queira saber como se puede interactuar con una dll que contiene un > > objeto c++ ?. > > > Algo bien simple , una clase que contiene el metodo > > > int suma(int x , int y) . > > > > > > Lo quiero hacer desde el MT . > > > > > > saludos kiko > > > > > > > > > --------------------------------- > > > 1GB gratis, Antivirus y Antispam > > > Correo Yahoo!, el mejor correo web del mundo > > > Abrí tu cuenta aquí > > > > > > > > Para más información sobre la Asociación escribir a info@... > > > > Smalltalking es un espacio colaborativo creado para el estudio y >
desarrollo en Ambientes de Objetos. > > Se sustenta gracias a la participación de sus socios. > > > > Las reglas de etiqueta sobre la lista están en > http://www.smalltalking.net/join/netiquete.htm > > > > > > > > > > --------------------------------- > > Enlaces de Yahoo! Grupos > > > > Para visitar el sitio web del grupo, andá a: > > http://ar.groups.yahoo.com/group/smalltalking/ > > > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > > smalltalking-unsubscribe@... > > > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de > Yahoo!. > > > > > > >
> > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > A tu celular ¿no le falta algo? > Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. > Más información aquí.
En un articulo tuyo explicas las diferencias entre un objeto ST y un componente , el echo es que estoy confundido ya que en algunos lugares llaman componentes a las componetes visuales que se pueden pegar en un formulario , como en delphy o c++ builder y no aclaran bien que es ubjeto y que no lo es.
saludos kiko
"Alejandro F. Reimondo" <aleReimondo@...> escribió:
Hola,
> Cual es la estructura de un objeto C++
Ninguna. En C++ no se puede trabajar con objetos. En C++ u otro LOO se puede ambicionar como máximo el trabajar OO; es decir, con componentes. Varias veces tocamos estos temas en la lista (lo digo, por si deseas releer mails históricos :-)
> y que lo diferencia con un ST,
En el caso particular de
Smalltalk/MT, donde el compilador es estático, es posible que el compilador pueda generar estructuras incluso compatibles. Si es así, lo mas conveniente es leer la documentación del MT y si no... leer la documentación de tu plataforma Cpuspus.
hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris" <kikogregoris@...> To: <smalltalking@...> Sent: Thursday, March 09, 2006 5:51 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola ALe > > Cual es la estructura de un objeto C++ y que lo diferencia con un ST, > En los manuales de MT hay un esquema que muestra al objeto ST con una direccion basica seguida de la direccion de los campos y luego un puntero a un diccionario de metodos . > > > saludos kiko > > "Alejandro F. Reimondo" <aleReimondo@...>
escribió: > Hola, > > > Que es eso de hacer un wrappers > > intermedios en C ???. > > Exponer el conjunto de funciones para ser > usadas desde C u otra plataforma por medios > tradicionales. > Normalmente, los componentes de la librería se > ven como punteros que son vueltos a pasar > a la librería (que los genera) sin importar si > son estructuras o componentes Cpuspus. > De esta forma uno usa desde C la funcionalidad > y no se complica con el uso de componentes > e interfaces altamente fraccionadas. > > > Otra cosa que no entendí es : > > Hoy en día es muy raro encontrar que quien > > expone una librería lo hace solo > > en C++ (y no expone una API); > > Normalmente quien hace una librería expone > una API para ser usada desde C. > Exponer componentes, en el caso de C++
(y > otros LOOs) te fuerza a usar la misma plataforma > de desarrollo del autor (lo que sería un mal > menor, al compararlo frente a lo que implica usar > sus componentes :-P ). > > suerte con Nebula2, > hasta pronto, > Ale. > > > > > ----- Original Message ----- > From: "kikote gregoris" <kikogregoris@...> > To: <smalltalking@...> > Sent: Wednesday, March 08, 2006 4:54 PM > Subject: Re: [objetos] Objetos C++ con ST > > > > Hola Ale > > > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que > esta desarrollado enteramente en C++, el motor es Free y se puden bajar > todos los fuentes http://nebuladevice.cubik.org/ > > > > En algún momento pregunte si era conveniente el desarrollar un
engine en > st , lo cual sigo pensando que seria la mejor solución .El problema es que > esto me aleja de mi objetivo primario que es desarrollar un game , charlando > con los desarrolladores de games de junin Oniric , me recomendaron que tome > la alternativa mas corta pues ellos tomaron la mas larga y no me lo > recomendaron para empezar. > > > > Es por eso que quería saber como hacer la conexión con objetos c++, vos > decís que es parecido a lo que se hace con objetos COM , tengo entendido que > los COM y los C++ son compatibles a nivel binario nada mas , cual es la > diferencia entre ambos. > > En MT la comunicación con COM es bastante fácil , ya que hay todo un > mecanismo bien definido para tal caso. > > > > Que es eso de hacer un wrappers > > intermedios en C ???. > > > > Otra cosa que no
entendi es : > > > > Hoy en día es muy raro encontrar que quien expone una librería lo hace > solo > > en C++ (y no expone una API); > > > > saludos kiko > > > > > > > > "Alejandro F. Reimondo" <aleReimondo@...> escribió: > > kiko, > > > > Seguramente en MT tenes una opción muy transparente para usar elementos de > > C++... pues el compilador es estático y preparado para integrarse bien con > > windows. > > Fijate como se accede a objetos COM y seguramente allí tendrás guías de > como > > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del > MT > > para ser bien asistido en esta duda). > > > > En un momento (hace casi 10 años) me toco hacer una conexión como la que > te > > estás planteando (con un
Smalltalk mío) para acceder a rutinas de > compresión > > por fractales (algo que estaba por "ponerse de moda" para comprimir > > imágenes, en ese entonces). > > El usar objetos C++ es algo menos frecuente de lo que parece. > > En ese momento lo que hice fue definir los métodos que tenia la DLL como > api > > calls (buscando la dirección del binding con el nombre mangleado y > > atachandoselo al método Smalltalk explícitamente), con un diseño similar > al > > que tiene VS. > > Así accedía a las funciones de instanciación del objeto C++. > > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla > virtual > > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > > mapeando la tabla virtual con métodos definidos como API y a los que le > >
pichicateaba la dirección de las funciones encontradas en la tabla > virtual. > > > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > > intermedios en C) llegue a la conclusión que no era algo digno de > recomendar > > :-) > > > > Hoy en día es muy raro encontrar que quien expone una librería lo hace > solo > > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > > evalúes si podes evitar usarlo (para no heredar la obsolescencia > > característica de este tipo de librerías). > > > > suerte, > > Ale. > > > > > > > > > > > > ----- Original Message ----- > > From: "kikote gregoris" <kikogregoris@...> > > To:
<smalltalking@...> > > Sent: Monday, March 06, 2006 4:52 PM > > Subject: [objetos] Objetos C++ con ST > > > > > > > Hola gente > > > > > > Queira saber como se puede interactuar con una dll que contiene un > > objeto c++ ?. > > > Algo bien simple , una clase que contiene el metodo > > > int suma(int x , int y) . > > > > > > Lo quiero hacer desde el MT . > > > > > > saludos kiko > > > > > > > > > --------------------------------- > > > 1GB gratis, Antivirus y Antispam > > > Correo Yahoo!, el mejor correo web del mundo > > > Abrí tu cuenta aquí > > > > > > > > Para más información sobre la Asociación
escribir a info@... > > > > Smalltalking es un espacio colaborativo creado para el estudio y > desarrollo en Ambientes de Objetos. > > Se sustenta gracias a la participación de sus socios. > > > > Las reglas de etiqueta sobre la lista están en > http://www.smalltalking.net/join/netiquete.htm > > > > > > > > > > --------------------------------- > > Enlaces de Yahoo! Grupos > > > > Para visitar el sitio web del grupo, andá a: > > http://ar.groups.yahoo.com/group/smalltalking/ > > > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > > smalltalking-unsubscribe@... > > > > El
uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de > Yahoo!. > > > > > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá
a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
Hola,
> Cual es la estructura de un objeto C++
Ninguna. En C++ no se puede trabajar con objetos.
En C++ u otro LOO se puede ambicionar como
máximo el trabajar OO; es decir, con componentes.
Varias veces tocamos estos temas en la lista (lo digo,
por si deseas releer mails históricos :-)
> y que lo diferencia con un ST,
En el caso particular de Smalltalk/MT, donde el
compilador es estático, es posible que el compilador
pueda generar estructuras incluso compatibles.
Si es así, lo mas conveniente es leer la documentación
del MT y si no... leer la documentación de tu
plataforma Cpuspus.
hasta pronto,
Ale.
----- Original Message -----
From: "kikote gregoris" <kikogregoris@...>
To: <smalltalking@...>
Sent: Thursday, March 09, 2006 5:51 PM
Subject: Re: [objetos] Objetos C++ con ST
> Hola ALe
>
> Cual es la estructura de un objeto C++ y que lo diferencia con un ST,
> En los manuales de MT hay un esquema que muestra al objeto ST con una
direccion basica seguida de la direccion de los campos y luego un puntero a
un diccionario de metodos .
>
>
> saludos kiko
>
> "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> Hola,
>
> > Que es eso de hacer un wrappers
> > intermedios en C ???.
>
> Exponer el conjunto de funciones para ser
> usadas desde C u otra plataforma por medios
> tradicionales.
> Normalmente, los componentes de la librería se
> ven como punteros que son vueltos a pasar
> a la librería (que los genera) sin importar si
> son estructuras o componentes Cpuspus.
> De esta forma uno usa desde C la funcionalidad
> y no se complica con el uso de componentes
> e interfaces altamente fraccionadas.
>
> > Otra cosa que no entendí es :
> > Hoy en día es muy raro encontrar que quien
> > expone una librería lo hace solo
> > en C++ (y no expone una API);
>
> Normalmente quien hace una librería expone
> una API para ser usada desde C.
> Exponer componentes, en el caso de C++ (y
> otros LOOs) te fuerza a usar la misma plataforma
> de desarrollo del autor (lo que sería un mal
> menor, al compararlo frente a lo que implica usar
> sus componentes :-P ).
>
> suerte con Nebula2,
> hasta pronto,
> Ale.
>
>
>
>
> ----- Original Message -----
> From: "kikote gregoris" <kikogregoris@...>
> To: <smalltalking@...>
> Sent: Wednesday, March 08, 2006 4:54 PM
> Subject: Re: [objetos] Objetos C++ con ST
>
>
> > Hola Ale
> >
> > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que
> esta desarrollado enteramente en C++, el motor es Free y se puden bajar
> todos los fuentes http://nebuladevice.cubik.org/
> >
> > En algún momento pregunte si era conveniente el desarrollar un engine
en
> st , lo cual sigo pensando que seria la mejor solución .El problema es que
> esto me aleja de mi objetivo primario que es desarrollar un game ,
charlando
> con los desarrolladores de games de junin Oniric , me recomendaron que
tome
> la alternativa mas corta pues ellos tomaron la mas larga y no me lo
> recomendaron para empezar.
> >
> > Es por eso que quería saber como hacer la conexión con objetos c++,
vos
> decís que es parecido a lo que se hace con objetos COM , tengo entendido
que
> los COM y los C++ son compatibles a nivel binario nada mas , cual es la
> diferencia entre ambos.
> > En MT la comunicación con COM es bastante fácil , ya que hay todo un
> mecanismo bien definido para tal caso.
> >
> > Que es eso de hacer un wrappers
> > intermedios en C ???.
> >
> > Otra cosa que no entendi es :
> >
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> solo
> > en C++ (y no expone una API);
> >
> > saludos kiko
> >
> >
> >
> > "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> > kiko,
> >
> > Seguramente en MT tenes una opción muy transparente para usar elementos
de
> > C++... pues el compilador es estático y preparado para integrarse bien
con
> > windows.
> > Fijate como se accede a objetos COM y seguramente allí tendrás guías de
> como
> > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios
del
> MT
> > para ser bien asistido en esta duda).
> >
> > En un momento (hace casi 10 años) me toco hacer una conexión como la que
> te
> > estás planteando (con un Smalltalk mío) para acceder a rutinas de
> compresión
> > por fractales (algo que estaba por "ponerse de moda" para comprimir
> > imágenes, en ese entonces).
> > El usar objetos C++ es algo menos frecuente de lo que parece.
> > En ese momento lo que hice fue definir los métodos que tenia la DLL como
> api
> > calls (buscando la dirección del binding con el nombre mangleado y
> > atachandoselo al método Smalltalk explícitamente), con un diseño similar
> al
> > que tiene VS.
> > Así accedía a las funciones de instanciación del objeto C++.
> > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla
> virtual
> > y mapeaba la estructura del objeto cpuspus a una estructura dinámica
> > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk
> > mapeando la tabla virtual con métodos definidos como API y a los que le
> > pichicateaba la dirección de las funciones encontradas en la tabla
> virtual.
> >
> > Como te imaginarás todo funcionaba de maravillas... pero luego de
hacerlo
> > (cosa indispensable para mantener mi sanidad y no tener que hacer
wrappers
> > intermedios en C) llegue a la conclusión que no era algo digno de
> recomendar
> > :-)
> >
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> solo
> > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría
que
> > evalúes si podes evitar usarlo (para no heredar la obsolescencia
> > característica de este tipo de librerías).
> >
> > suerte,
> > Ale.
> >
> >
> >
> >
> >
> > ----- Original Message -----
> > From: "kikote gregoris" <kikogregoris@...>
> > To: <smalltalking@...>
> > Sent: Monday, March 06, 2006 4:52 PM
> > Subject: [objetos] Objetos C++ con ST
> >
> >
> > > Hola gente
> > >
> > > Queira saber como se puede interactuar con una dll que contiene un
> > objeto c++ ?.
> > > Algo bien simple , una clase que contiene el metodo
> > > int suma(int x , int y) .
> > >
> > > Lo quiero hacer desde el MT .
> > >
> > > saludos kiko
> > >
> > >
> > > ---------------------------------
> > > 1GB gratis, Antivirus y Antispam
> > > Correo Yahoo!, el mejor correo web del mundo
> > > Abrí tu cuenta aquí
> >
> >
> >
> > Para más información sobre la Asociación escribir a
info@...
> >
> > Smalltalking es un espacio colaborativo creado para el estudio y
> desarrollo en Ambientes de Objetos.
> > Se sustenta gracias a la participación de sus socios.
> >
> > Las reglas de etiqueta sobre la lista están en
> http://www.smalltalking.net/join/netiquete.htm
> >
> >
> >
> >
> > ---------------------------------
> > Enlaces de Yahoo! Grupos
> >
> > Para visitar el sitio web del grupo, andá a:
> > http://ar.groups.yahoo.com/group/smalltalking/
> >
> > Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> > smalltalking-unsubscribe@...
> >
> > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
> Yahoo!.
> >
> >
> >
> >
> > ---------------------------------
> > 1GB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí
>
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
> ---------------------------------
> 1GB gratis, Antivirus y Antispam
> Correo Yahoo!, el mejor correo web del mundo
> Abrí tu cuenta aquí
Hola kiko,
> Los fuentes estan para hacer lo que uno quiere , no hay una DLL echa .
> Con respecto a exponer un API , podrías decirme como hacer
> esto con algun ejemplo bien pabo, si no te jode .
Hace una DLL que use la librería y expone una funcion API por cada
funcionalidad que desees usar.
Creo que hay herrameinats que automatizan (al menos parcialmente)
esa labor.
> Otra cosa que quiere decir:
> De esta forma uno usa desde C la funcionalidad
> y no se complica con el uso de componentes
> e interfaces altamente fraccionadas
Por lo general como producir usando un lenguaje de bajo nivel,
como C++ es muy costoso; acostumbra a pasar que quedan
en el olvido, o fuera de las posibilidades del desarrollo;
el realizar un gran unmero de ciclos antes de publicar una interfáz.
Esto tiene como efecto posterior,:
1.- por lo general no se preservan las interfaces entre versiones
de una librería; sino que cada programa que las usa se adapta
bajo costos de quien la usa. (esto es consistente con la forma
en que se acostumbra a producir con LOOs, en términos generales...
aunque hay alguna excepcion)
2.- por lo general se expone hasta el mas minimo detalle de
funcionalidad; sin poder evaluar el costo que esto implica
a futuro.
Trabajando en un ambiente de forma adecuada, no se
observan estos efectos.
hasta pronto
Ale.
----- Original Message -----
From: "kikote gregoris" <kikogregoris@...>
To: <smalltalking@...>
Sent: Thursday, March 09, 2006 5:25 PM
Subject: Re: [objetos] Objetos C++ con ST
> Hola ALe
>
>
> Los fuentes estan para hacer lo que uno quiere , no hay una DLL echa .
> Con respecto a exponer un API , podrías decirme como hacer esto con
algun ejemplo bien pabo, si no te jode .
> Mi conocimiento sobre C y C++ es escaso.
>
> Otra cosa que quiere decir:
>
> De esta forma uno usa desde C la funcionalidad
> y no se complica con el uso de componentes
> e interfaces altamente fraccionadas
>
> saludos kiko
>
> "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> Hola,
>
> > Que es eso de hacer un wrappers
> > intermedios en C ???.
>
> Exponer el conjunto de funciones para ser
> usadas desde C u otra plataforma por medios
> tradicionales.
> Normalmente, los componentes de la librería se
> ven como punteros que son vueltos a pasar
> a la librería (que los genera) sin importar si
> son estructuras o componentes Cpuspus.
> De esta forma uno usa desde C la funcionalidad
> y no se complica con el uso de componentes
> e interfaces altamente fraccionadas.
>
> > Otra cosa que no entendí es :
> > Hoy en día es muy raro encontrar que quien
> > expone una librería lo hace solo
> > en C++ (y no expone una API);
>
> Normalmente quien hace una librería expone
> una API para ser usada desde C.
> Exponer componentes, en el caso de C++ (y
> otros LOOs) te fuerza a usar la misma plataforma
> de desarrollo del autor (lo que sería un mal
> menor, al compararlo frente a lo que implica usar
> sus componentes :-P ).
>
> suerte con Nebula2,
> hasta pronto,
> Ale.
>
>
>
>
> ----- Original Message -----
> From: "kikote gregoris" <kikogregoris@...>
> To: <smalltalking@...>
> Sent: Wednesday, March 08, 2006 4:54 PM
> Subject: Re: [objetos] Objetos C++ con ST
>
>
> > Hola Ale
> >
> > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que
> esta desarrollado enteramente en C++, el motor es Free y se puden bajar
> todos los fuentes http://nebuladevice.cubik.org/
> >
> > En algún momento pregunte si era conveniente el desarrollar un engine
en
> st , lo cual sigo pensando que seria la mejor solución .El problema es que
> esto me aleja de mi objetivo primario que es desarrollar un game ,
charlando
> con los desarrolladores de games de junin Oniric , me recomendaron que
tome
> la alternativa mas corta pues ellos tomaron la mas larga y no me lo
> recomendaron para empezar.
> >
> > Es por eso que quería saber como hacer la conexión con objetos c++,
vos
> decís que es parecido a lo que se hace con objetos COM , tengo entendido
que
> los COM y los C++ son compatibles a nivel binario nada mas , cual es la
> diferencia entre ambos.
> > En MT la comunicación con COM es bastante fácil , ya que hay todo un
> mecanismo bien definido para tal caso.
> >
> > Que es eso de hacer un wrappers
> > intermedios en C ???.
> >
> > Otra cosa que no entendi es :
> >
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> solo
> > en C++ (y no expone una API);
> >
> > saludos kiko
> >
> >
> >
> > "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> > kiko,
> >
> > Seguramente en MT tenes una opción muy transparente para usar elementos
de
> > C++... pues el compilador es estático y preparado para integrarse bien
con
> > windows.
> > Fijate como se accede a objetos COM y seguramente allí tendrás guías de
> como
> > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios
del
> MT
> > para ser bien asistido en esta duda).
> >
> > En un momento (hace casi 10 años) me toco hacer una conexión como la que
> te
> > estás planteando (con un Smalltalk mío) para acceder a rutinas de
> compresión
> > por fractales (algo que estaba por "ponerse de moda" para comprimir
> > imágenes, en ese entonces).
> > El usar objetos C++ es algo menos frecuente de lo que parece.
> > En ese momento lo que hice fue definir los métodos que tenia la DLL como
> api
> > calls (buscando la dirección del binding con el nombre mangleado y
> > atachandoselo al método Smalltalk explícitamente), con un diseño similar
> al
> > que tiene VS.
> > Así accedía a las funciones de instanciación del objeto C++.
> > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla
> virtual
> > y mapeaba la estructura del objeto cpuspus a una estructura dinámica
> > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk
> > mapeando la tabla virtual con métodos definidos como API y a los que le
> > pichicateaba la dirección de las funciones encontradas en la tabla
> virtual.
> >
> > Como te imaginarás todo funcionaba de maravillas... pero luego de
hacerlo
> > (cosa indispensable para mantener mi sanidad y no tener que hacer
wrappers
> > intermedios en C) llegue a la conclusión que no era algo digno de
> recomendar
> > :-)
> >
> > Hoy en día es muy raro encontrar que quien expone una librería lo hace
> solo
> > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría
que
> > evalúes si podes evitar usarlo (para no heredar la obsolescencia
> > característica de este tipo de librerías).
> >
> > suerte,
> > Ale.
> >
> >
> >
> >
> >
> > ----- Original Message -----
> > From: "kikote gregoris" <kikogregoris@...>
> > To: <smalltalking@...>
> > Sent: Monday, March 06, 2006 4:52 PM
> > Subject: [objetos] Objetos C++ con ST
> >
> >
> > > Hola gente
> > >
> > > Queira saber como se puede interactuar con una dll que contiene un
> > objeto c++ ?.
> > > Algo bien simple , una clase que contiene el metodo
> > > int suma(int x , int y) .
> > >
> > > Lo quiero hacer desde el MT .
> > >
> > > saludos kiko
> > >
> > >
> > > ---------------------------------
> > > 1GB gratis, Antivirus y Antispam
> > > Correo Yahoo!, el mejor correo web del mundo
> > > Abrí tu cuenta aquí
> >
> >
> >
> > Para más información sobre la Asociación escribir a
info@...
> >
> > Smalltalking es un espacio colaborativo creado para el estudio y
> desarrollo en Ambientes de Objetos.
> > Se sustenta gracias a la participación de sus socios.
> >
> > Las reglas de etiqueta sobre la lista están en
> http://www.smalltalking.net/join/netiquete.htm
> >
> >
> >
> >
> > ---------------------------------
> > Enlaces de Yahoo! Grupos
> >
> > Para visitar el sitio web del grupo, andá a:
> > http://ar.groups.yahoo.com/group/smalltalking/
> >
> > Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> > smalltalking-unsubscribe@...
> >
> > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
> Yahoo!.
> >
> >
> >
> >
> > ---------------------------------
> > 1GB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí
>
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
> ---------------------------------
> A tu celular ¿no le falta algo?
> Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular.
> Más información aquí.
Cual es la estructura de un objeto C++ y que lo diferencia con un ST,
En los manuales de MT hay un esquema que muestra al objeto ST con una direccion basica seguida de la direccion de los campos y luego un puntero a un diccionario de metodos .
saludos kiko
"Alejandro F. Reimondo" <aleReimondo@...> escribió:
Hola,
> Que es eso de hacer un wrappers > intermedios en C ???.
Exponer el conjunto de funciones para ser usadas desde C u otra plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus. De esta forma uno usa desde
C la funcionalidad y no se complica con el uso de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris" <kikogregoris@...> To: <smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d
que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como hacer la conexión con objetos c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil ,
ya que hay todo un mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" <aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con > windows. > Fijate como se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco
hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la
dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la obsolescencia > característica de este tipo de librerías). > > suerte, > Ale. > > > > > > ----- Original Message ----- > From: "kikote gregoris" <kikogregoris@...> > To: <smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject: [objetos] Objetos C++ con ST > > > > Hola
gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?. > > Algo bien simple , una clase que contiene el metodo > > int suma(int x , int y) . > > > > Lo quiero hacer desde el MT . > > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Los fuentes estan para hacer lo que uno quiere , no hay una DLL echa .
Con respecto a exponer un API , podrías decirme como hacer esto con algun ejemplo bien pabo, si no te jode .
Mi conocimiento sobre C y C++ es escaso.
Otra cosa que quiere decir:
De esta forma uno usa desde C la funcionalidad y no se complica con el uso de componentes e interfaces altamente fraccionadas
saludos kiko
"Alejandro F. Reimondo" <aleReimondo@...> escribió:
Hola,
> Que es eso de hacer un wrappers > intermedios en C ???.
Exponer el conjunto de funciones para ser usadas desde C u otra
plataforma por medios tradicionales. Normalmente, los componentes de la librería se ven como punteros que son vueltos a pasar a la librería (que los genera) sin importar si son estructuras o componentes Cpuspus. De esta forma uno usa desde C la funcionalidad y no se complica con el uso de componentes e interfaces altamente fraccionadas.
> Otra cosa que no entendí es : > Hoy en día es muy raro encontrar que quien > expone una librería lo hace solo > en C++ (y no expone una API);
Normalmente quien hace una librería expone una API para ser usada desde C. Exponer componentes, en el caso de C++ (y otros LOOs) te fuerza a usar la misma plataforma de desarrollo del autor (lo que sería un mal menor, al compararlo frente a lo que implica usar sus componentes :-P ).
suerte con Nebula2, hasta pronto, Ale.
----- Original Message ----- From: "kikote gregoris"
<kikogregoris@...> To: <smalltalking@...> Sent: Wednesday, March 08, 2006 4:54 PM Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale > > Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/ > > En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar. > > Es por eso que quería saber como hacer la conexión con objetos
c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos. > En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso. > > Que es eso de hacer un wrappers > intermedios en C ???. > > Otra cosa que no entendi es : > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); > > saludos kiko > > > > "Alejandro F. Reimondo" <aleReimondo@...> escribió: > kiko, > > Seguramente en MT tenes una opción muy transparente para usar elementos de > C++... pues el compilador es estático y preparado para integrarse bien con > windows. > Fijate como
se accede a objetos COM y seguramente allí tendrás guías de como > hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT > para ser bien asistido en esta duda). > > En un momento (hace casi 10 años) me toco hacer una conexión como la que te > estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión > por fractales (algo que estaba por "ponerse de moda" para comprimir > imágenes, en ese entonces). > El usar objetos C++ es algo menos frecuente de lo que parece. > En ese momento lo que hice fue definir los métodos que tenia la DLL como api > calls (buscando la dirección del binding con el nombre mangleado y > atachandoselo al método Smalltalk explícitamente), con un diseño similar al > que tiene VS. > Así accedía a las funciones de instanciación del objeto C++. > Luego de crearlo (y tener el miserable puntero :) accedía a la
tabla virtual > y mapeaba la estructura del objeto cpuspus a una estructura dinámica > (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk > mapeando la tabla virtual con métodos definidos como API y a los que le > pichicateaba la dirección de las funciones encontradas en la tabla virtual. > > Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo > (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers > intermedios en C) llegue a la conclusión que no era algo digno de recomendar > :-) > > Hoy en día es muy raro encontrar que quien expone una librería lo hace solo > en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que > evalúes si podes evitar usarlo (para no heredar la obsolescencia > característica de este tipo de librerías). > > suerte, > Ale. > > > > > >
----- Original Message ----- > From: "kikote gregoris" <kikogregoris@...> > To: <smalltalking@...> > Sent: Monday, March 06, 2006 4:52 PM > Subject: [objetos] Objetos C++ con ST > > > > Hola gente > > > > Queira saber como se puede interactuar con una dll que contiene un > objeto c++ ?. > > Algo bien simple , una clase que contiene el metodo > > int suma(int x , int y) . > > > > Lo quiero hacer desde el MT . > > > > saludos kiko > > > > > > --------------------------------- > > 1GB gratis, Antivirus y Antispam > > Correo Yahoo!, el mejor correo web del mundo > > Abrí tu cuenta aquí > > > > Para más información sobre la Asociación escribir a
info@... > > Smalltalking es un espacio colaborativo creado para el estudio y desarrollo en Ambientes de Objetos. > Se sustenta gracias a la participación de sus socios. > > Las reglas de etiqueta sobre la lista están en http://www.smalltalking.net/join/netiquete.htm > > > > > --------------------------------- > Enlaces de Yahoo! Grupos > > Para visitar el sitio web del grupo, andá a: > http://ar.groups.yahoo.com/group/smalltalking/ > > Para cancelar tu suscripción a este grupo, enviá un mensaje a: > smalltalking-unsubscribe@... > > El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de Yahoo!. > > > > >
--------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
A tu celular ¿no le falta algo? Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. Más información aquí.
Hola,
> Que es eso de hacer un wrappers
> intermedios en C ???.
Exponer el conjunto de funciones para ser
usadas desde C u otra plataforma por medios
tradicionales.
Normalmente, los componentes de la librería se
ven como punteros que son vueltos a pasar
a la librería (que los genera) sin importar si
son estructuras o componentes Cpuspus.
De esta forma uno usa desde C la funcionalidad
y no se complica con el uso de componentes
e interfaces altamente fraccionadas.
> Otra cosa que no entendí es :
> Hoy en día es muy raro encontrar que quien
> expone una librería lo hace solo
> en C++ (y no expone una API);
Normalmente quien hace una librería expone
una API para ser usada desde C.
Exponer componentes, en el caso de C++ (y
otros LOOs) te fuerza a usar la misma plataforma
de desarrollo del autor (lo que sería un mal
menor, al compararlo frente a lo que implica usar
sus componentes :-P ).
suerte con Nebula2,
hasta pronto,
Ale.
----- Original Message -----
From: "kikote gregoris" <kikogregoris@...>
To: <smalltalking@...>
Sent: Wednesday, March 08, 2006 4:54 PM
Subject: Re: [objetos] Objetos C++ con ST
> Hola Ale
>
> Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que
esta desarrollado enteramente en C++, el motor es Free y se puden bajar
todos los fuentes http://nebuladevice.cubik.org/
>
> En algún momento pregunte si era conveniente el desarrollar un engine en
st , lo cual sigo pensando que seria la mejor solución .El problema es que
esto me aleja de mi objetivo primario que es desarrollar un game , charlando
con los desarrolladores de games de junin Oniric , me recomendaron que tome
la alternativa mas corta pues ellos tomaron la mas larga y no me lo
recomendaron para empezar.
>
> Es por eso que quería saber como hacer la conexión con objetos c++, vos
decís que es parecido a lo que se hace con objetos COM , tengo entendido que
los COM y los C++ son compatibles a nivel binario nada mas , cual es la
diferencia entre ambos.
> En MT la comunicación con COM es bastante fácil , ya que hay todo un
mecanismo bien definido para tal caso.
>
> Que es eso de hacer un wrappers
> intermedios en C ???.
>
> Otra cosa que no entendi es :
>
> Hoy en día es muy raro encontrar que quien expone una librería lo hace
solo
> en C++ (y no expone una API);
>
> saludos kiko
>
>
>
> "Alejandro F. Reimondo" <aleReimondo@...> escribió:
> kiko,
>
> Seguramente en MT tenes una opción muy transparente para usar elementos de
> C++... pues el compilador es estático y preparado para integrarse bien con
> windows.
> Fijate como se accede a objetos COM y seguramente allí tendrás guías de
como
> hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del
MT
> para ser bien asistido en esta duda).
>
> En un momento (hace casi 10 años) me toco hacer una conexión como la que
te
> estás planteando (con un Smalltalk mío) para acceder a rutinas de
compresión
> por fractales (algo que estaba por "ponerse de moda" para comprimir
> imágenes, en ese entonces).
> El usar objetos C++ es algo menos frecuente de lo que parece.
> En ese momento lo que hice fue definir los métodos que tenia la DLL como
api
> calls (buscando la dirección del binding con el nombre mangleado y
> atachandoselo al método Smalltalk explícitamente), con un diseño similar
al
> que tiene VS.
> Así accedía a las funciones de instanciación del objeto C++.
> Luego de crearlo (y tener el miserable puntero :) accedía a la tabla
virtual
> y mapeaba la estructura del objeto cpuspus a una estructura dinámica
> (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk
> mapeando la tabla virtual con métodos definidos como API y a los que le
> pichicateaba la dirección de las funciones encontradas en la tabla
virtual.
>
> Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo
> (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers
> intermedios en C) llegue a la conclusión que no era algo digno de
recomendar
> :-)
>
> Hoy en día es muy raro encontrar que quien expone una librería lo hace
solo
> en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que
> evalúes si podes evitar usarlo (para no heredar la obsolescencia
> característica de este tipo de librerías).
>
> suerte,
> Ale.
>
>
>
>
>
> ----- Original Message -----
> From: "kikote gregoris" <kikogregoris@...>
> To: <smalltalking@...>
> Sent: Monday, March 06, 2006 4:52 PM
> Subject: [objetos] Objetos C++ con ST
>
>
> > Hola gente
> >
> > Queira saber como se puede interactuar con una dll que contiene un
> objeto c++ ?.
> > Algo bien simple , una clase XXX que contiene el metodo
> > int suma(int x , int y) .
> >
> > Lo quiero hacer desde el MT .
> >
> > saludos kiko
> >
> >
> > ---------------------------------
> > 1GB gratis, Antivirus y Antispam
> > Correo Yahoo!, el mejor correo web del mundo
> > Abrí tu cuenta aquí
>
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
>
>
>
> ---------------------------------
> Enlaces de Yahoo! Grupos
>
> Para visitar el sitio web del grupo, andá a:
> http://ar.groups.yahoo.com/group/smalltalking/
>
> Para cancelar tu suscripción a este grupo, enviá un mensaje a:
> smalltalking-unsubscribe@...
>
> El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio de
Yahoo!.
>
>
>
>
> ---------------------------------
> 1GB gratis, Antivirus y Antispam
> Correo Yahoo!, el mejor correo web del mundo
> Abrí tu cuenta aquí
Bueno se trata de usar un Engine 3d que se llama Nebula Device 2 , que esta desarrollado enteramente en C++, el motor es Free y se puden bajar todos los fuentes http://nebuladevice.cubik.org/
En algún momento pregunte si era conveniente el desarrollar un engine en st , lo cual sigo pensando que seria la mejor solución .El problema es que esto me aleja de mi objetivo primario que es desarrollar un game , charlando con los desarrolladores de games de junin Oniric , me recomendaron que tome la alternativa mas corta pues ellos tomaron la mas larga y no me lo recomendaron para empezar.
Es por eso que quería saber como hacer la conexión con objetos c++, vos decís que es parecido a lo que se hace con objetos COM , tengo entendido que los COM y los C++ son compatibles a nivel binario nada mas , cual es la diferencia entre ambos.
En MT la comunicación con COM es bastante fácil , ya que hay todo un mecanismo bien definido para tal caso.
Que es eso de hacer un wrappers intermedios en C ???.
Otra cosa que no entendi es :
Hoy en día es muy raro encontrar que quien expone una librería lo hace solo en C++ (y no expone una API);
saludos kiko
"Alejandro F. Reimondo" <aleReimondo@...> escribió:
kiko,
Seguramente en MT tenes una opción muy transparente para
usar elementos de C++... pues el compilador es estático y preparado para integrarse bien con windows. Fijate como se accede a objetos COM y seguramente allí tendrás guías de como hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT para ser bien asistido en esta duda).
En un momento (hace casi 10 años) me toco hacer una conexión como la que te estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión por fractales (algo que estaba por "ponerse de moda" para comprimir imágenes, en ese entonces). El usar objetos C++ es algo menos frecuente de lo que parece. En ese momento lo que hice fue definir los métodos que tenia la DLL como api calls (buscando la dirección del binding con el nombre mangleado y atachandoselo al método Smalltalk explícitamente), con un diseño similar al que tiene VS. Así accedía a las funciones de instanciación del objeto C++. Luego de crearlo (y tener el miserable
puntero :) accedía a la tabla virtual y mapeaba la estructura del objeto cpuspus a una estructura dinámica (parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk mapeando la tabla virtual con métodos definidos como API y a los que le pichicateaba la dirección de las funciones encontradas en la tabla virtual.
Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo (cosa indispensable para mantener mi sanidad y no tener que hacer wrappers intermedios en C) llegue a la conclusión que no era algo digno de recomendar :-)
Hoy en día es muy raro encontrar que quien expone una librería lo hace solo en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que evalúes si podes evitar usarlo (para no heredar la obsolescencia característica de este tipo de librerías).
suerte, Ale.
----- Original Message ----- From: "kikote gregoris"
<kikogregoris@...> To: <smalltalking@...> Sent: Monday, March 06, 2006 4:52 PM Subject: [objetos] Objetos C++ con ST
> Hola gente > > Queira saber como se puede interactuar con una dll que contiene un objeto c++ ?. > Algo bien simple , una clase XXX que contiene el metodo > int suma(int x , int y) . > > Lo quiero hacer desde el MT . > > saludos kiko > > > --------------------------------- > 1GB gratis, Antivirus y Antispam > Correo Yahoo!, el mejor correo web del mundo > Abrí tu cuenta aquí
1GB gratis, Antivirus y Antispam Correo Yahoo!, el mejor correo web del mundo Abrí tu cuenta aquí
Hi (again),
My last email was on image gestation...
e.g. the use of the objects in the runing environment
to build a new environment from bigbang objects.
Another interesting point to explore is the creation
of a custom VM to run the generated images...
The tool that generates the new image and dump
it on disk, also knows what primitives are really
requiered and, if we have a model of the VM in
the image, we can also write the VM code adapted
to minimum requitrements for generated image.
The reduction of VM size (and customization of VM
according to runtime schemas) is as important as
image size when images are reduced.
best,
Ale.
----- Original Message -----
From: "Alejandro F. Reimondo" <aleReimondo@...>
To: "Bruce Badger" <bwbadger@...>
Cc: "smalltalking" <smalltalking@...>; <vwnc@...>
Sent: Tuesday, March 07, 2006 6:32 PM
Subject: Re: AW: Runtime obesity
> Hi all,
>
> An interesting path to be explored can be the generation
> of images inside running images (called image gestation).
>
> I have built many images and cross-VM images
> (e.g. building new smalltalk 3D ambiences for
> entertrainment industry, when we didn´t have
> a running VM), resulting in interesting images
> from 80kb -for helloWorld on console- to
> complete running application environments.
>
> The technique start from gestation of a minimum
> environment inside a running host; and use the
> host´s tools (browsers and inspectors, & automated
> nutrition tools) to put methods inside the child image.
> Then a system tracer is run to dump child image
> contents (patching and cutting references to host
> image) and doing custom primitive transforms if
> required (e.g. when generating cross image development)
>
> I have encountered that building images by gestation
> is much more easy than shrinking running images;
> because you build the image in a constructive
> manner (on real running requirements) and not by
> reduction.
>
> One of the most valuable nutrient tools has been
> method tracers that register method activations.
> They can be used to record the methods requiered
> while evaluating an expression in the host image,
> and then inject the collected methods (and classes)
> onto the child image.
>
> More details and samples can be found at
> http://www.aleReimondo.com.ar/ImageGestation
>
> best,
> Ale.
>
>
> ----- Original Message -----
> From: "Bruce Badger" <bwbadger@...>
> To: "Vwnc" <vwnc@...>
> Sent: Tuesday, March 07, 2006 5:24 PM
> Subject: Re: AW: Runtime obesity
>
>
> On 08/03/06, Charles A. Monteiro <charles@...> wrote:
>
> > So I'm game if anybody is interested, Bruce perhaps :)
>
> Sure!
>
> I think a build-up BOF would be fairly short, though:
>
> Users: "We want a smaller better understood base.im"
>
> Cincom: "We know. We're working on it."
>
> All: "Beer!"
>
> Perhaps a BOF on "Deployment" would be the way to go. Then we can
> talk about the base.im for the first 10 seconds, and then talk about
> RTP and perhaps get input from people using other Smalltalk
> implementations too.
>
> All the best,
> Bruce
> --
> Make the most of your skills - with OpenSkills
> http://www.openskills.org/
>
Hi all,
An interesting path to be explored can be the generation
of images inside running images (called image gestation).
I have built many images and cross-VM images
(e.g. building new smalltalk 3D ambiences for
entertrainment industry, when we didn´t have
a running VM), resulting in interesting images
from 80kb -for helloWorld on console- to
complete running application environments.
The technique start from gestation of a minimum
environment inside a running host; and use the
host´s tools (browsers and inspectors, & automated
nutrition tools) to put methods inside the child image.
Then a system tracer is run to dump child image
contents (patching and cutting references to host
image) and doing custom primitive transforms if
required (e.g. when generating cross image development)
I have encountered that building images by gestation
is much more easy than shrinking running images;
because you build the image in a constructive
manner (on real running requirements) and not by
reduction.
One of the most valuable nutrient tools has been
method tracers that register method activations.
They can be used to record the methods requiered
while evaluating an expression in the host image,
and then inject the collected methods (and classes)
onto the child image.
More details and samples can be found at
http://www.aleReimondo.com.ar/ImageGestation
best,
Ale.
----- Original Message -----
From: "Bruce Badger" <bwbadger@...>
To: "Vwnc" <vwnc@...>
Sent: Tuesday, March 07, 2006 5:24 PM
Subject: Re: AW: Runtime obesity
On 08/03/06, Charles A. Monteiro <charles@...> wrote:
> So I'm game if anybody is interested, Bruce perhaps :)
Sure!
I think a build-up BOF would be fairly short, though:
Users: "We want a smaller better understood base.im"
Cincom: "We know. We're working on it."
All: "Beer!"
Perhaps a BOF on "Deployment" would be the way to go. Then we can
talk about the base.im for the first 10 seconds, and then talk about
RTP and perhaps get input from people using other Smalltalk
implementations too.
All the best,
Bruce
--
Make the most of your skills - with OpenSkills
http://www.openskills.org/
Lautaro,
fijate en las clases ObjectMemory y Snapshot para ver el manejo de la
imagen.
Para hacer que guarde cada x segundos, podrías tirar un thread para que
se quede ocioso por x segundos y luego genere un snapshot. Algo del
estilo de:
[[true]
whileTrue:[
(Delay forSeconds: x) wait.
ObjectMemory snapshot.
]] forkAt:....
De todas formas no se hasta que punto es bueno hacer eso, podrías llegar
a guardar la imagen justo cuando te mandaste algún moco y se te rompió.
Creo que si vas a hacer algo de ese estilo lo mejor sería ir guardandola
en un archivo temporal y sólo guardar la imagen final "a mano". Asimismo
fijate que lo que perdiste por el corte de luz probablemente lo puedas
recuperar usando el change set (fijate en los docs que vienen con el VW).
Por el tema de los shortcuts globales habia un parcel que algo de eso
manejaba (creo que se llama MagicKeys). Fijate si con ese parcel se
puede hacer lo que querés. Si no te resulta, en algún momento creo que
hice algo del estilo, pero no me acuerdo en que versión de VW ni que tan
testeado estaba.
Saludos,
Andrés
---------------------------------------------------------
Mis padres no solían pegarme; lo hicieron sólo una vez:
empezaron en Febrero de 1940 y terminaron en Mayo del 43.
Woody Allen
Luke LAut SkyFernadezWalker wrote:
> Buenas gentes, quiero hacer que mi visualworks labure salvando la imagen
> haciendo una combinaciòn de teclas(por ejemplo Ctrl + Alt + g). Pero no doy
> con la tecla de donde lo tengo que hacer. Esto viene porque el entorno no es
> còmodo para salvar, es decir que es tediosísimo tener que ir hasta el ícono.
> Y por no hacerlo hace un rato se cortó la luz de mi casa y perdí varios
> mensajes de desplazamiento de matrices(imaginarán que a mì me cuesta, pero
> hago lo que puedo jejeje)
>
> Bueno, si saben cómo hacerlo 1000 gracias.
> AAhhh, me gustaría hacer un salvado automático(por ejemplo cada 3 minutos
> que pise la imagen.)
>
>
> 2000 gracias!
>
> Lautaro Fernández
>
Hola Lautaro,
>Buenas gentes, quiero hacer que mi
> visualworks labure salvando la imagen
>haciendo una combinación de teclas(por
> ejemplo Ctrl + Alt + g).
Eso debería ser muy simple de hacer, fijate
un poco como se manejan las teclas...
Una opción mas simple y útil, es colocar en el
Transcript (u otra ventana de textos que uses
a menudo mientras trabajas) la expresión
que mas convenga para guardar el estado de
tu trabajo (si trabajas con un image monolítico,
y grabas el image, puede ser el saveImage...
sino podes grabar solo tu proyecto, etc...
como mas se adecúe a la modalidad de trabajo
que actualmente usas)
>Pero no doy con la tecla de donde lo tengo
> que hacer. Esto viene porque el entorno no es
> cómodo para salvar, es decir que es tediosísimo
> tener que ir hasta el ícono.
Tené paciencia y busca un poco mas (busca
también en los manuales). El resultado que
obtendrás de la búsqueda será mucho mas valioso
que el saber cómo/dónde hacerlo.
Disfrutalo... no consumas tus momentos con tu
ambiente, tratá de abordarlo de a poco
como a una buena lectura.
>Y por no hacerlo hace un rato se cortó la luz
> de mi casa y perdí varios mensajes de desplazamiento
> de matrices(imaginarán que a mì me cuesta, pero
> hago lo que puedo jejeje)
En todos los ambientes, hay un log de cambios que
vas haciendo sobre el ambiente, fijate como recuperar
lo que habías hecho e inyectalo en la imagen que
habías grabado por última vez...
Normalmente nos ocurre a todos que a veces (en
nuestra actividad explorativa y constructiva) hacemos
daño a una parte del ambiente y nos damos cuenta
tarde... como para intentar repararlo (de forma instantánea).
Si grabas el image en ese momento estarás grabando
un sistema con la patología...
Ese es el punto débil de tu idea (que a todos se nos
ocurre cuando se nos corta la luz :) y la solución
a este problema es recuperar las acciones desde
el log de cambios producidos antes del Apocalipsis :-)
En el trabajo diario y despreocupado en un ambiente,
uno realiza acciones de forma instantánea y en distintas
partes del sistema.
Eso es muy sano y positivo al momento de realizar
la actividad constructiva de un sistema con objetos;
pero cuando uno detecta un problema (grave)
es importante evaluar la conveniencia de los dos
caminos posibles:
1.- tratar de repararlo.
2.- salir del image sin grabar (matar a todos)
y restaurar lo valioso de los últimos cambios.
Espero te sea de utilidad estos comentarios y te
motiven a usar esta modalidad; ya que es la más
conveniente en la mayoría de los ámbitos de trabajo.
En algunos casos los cambios son guardados en archivos
de texto simple en formato chunk (fijate en los manuales
cómo es este formato simple, pues es muy recomendable
que lo entiendas).
En otros casos, cuando se usan herramientas de trabajo grupal,
los cambios se manejan por la herramienta y se almacenan
en un repositorio de código los me´todos cambiados y en
un archivo de texto (aparte) las evaluaciones hechas sobre
el sistema.
Para restaurar el estado de un sistema de objetos, no
alcanza el código (seguramente ya conocerás sobre
este detalle) sino que es MUY importante restaurar
el estado de los objetos que los componen (cosa a
veces mas compleja que poner métodos en clases :).
Esta restauración de la consistencia de los objetos
del sistema es algo de mucho valor que estas poniendo
en tu ambiente y son una de las cosas que muestran
claramente que al trabajar en un ambiente de objetos
(como Smalltalk) uno no escribe solo programas...
ni alcanza con formular un lenguaje.
>Bueno, si saben cómo hacerlo 1000 gracias.
>AAhhh, me gustaría hacer un salvado
> automático(por ejemplo cada 3 minutos
>que pise la imagen.)
Seguramente te habrá sorprendido la razón
de porqué esa facilidad no estaba en un Smalltalk...
no?
Espero mi mail sirva para entender que hay otras
opciones.
hasta pronto,
Ale.
----- Original Message -----
From: "Luke LAut SkyFernadezWalker" <evaklo@...>
To: <smalltalking@...>
Sent: Tuesday, March 07, 2006 11:58 AM
Subject: [objetos] Variables globales
Buenas gentes, quiero hacer que mi visualworks labure salvando la imagen
haciendo una combinaciòn de teclas(por ejemplo Ctrl + Alt + g). Pero no doy
con la tecla de donde lo tengo que hacer. Esto viene porque el entorno no es
còmodo para salvar, es decir que es tediosísimo tener que ir hasta el ícono.
Y por no hacerlo hace un rato se cortó la luz de mi casa y perdí varios
mensajes de desplazamiento de matrices(imaginarán que a mì me cuesta, pero
hago lo que puedo jejeje)
Bueno, si saben cómo hacerlo 1000 gracias.
AAhhh, me gustaría hacer un salvado automático(por ejemplo cada 3 minutos
que pise la imagen.)
2000 gracias!
Lautaro Fernández
Buenas gentes, quiero hacer que mi visualworks labure salvando la imagen haciendo una combinaciòn de teclas(por ejemplo Ctrl + Alt + g). Pero no doy con la tecla de donde lo tengo que hacer. Esto viene porque el entorno no es còmodo para salvar, es decir que es tediosísimo tener que ir hasta el ícono.
Y por no hacerlo hace un rato se cortó la luz de mi casa y perdí varios mensajes de desplazamiento de matrices(imaginarán que a mì me cuesta, pero hago lo que puedo jejeje)
Bueno, si saben cómo hacerlo 1000 gracias. AAhhh, me gustaría hacer un salvado automático(por ejemplo cada 3 minutos que pise la imagen.)
kiko,
Seguramente en MT tenes una opción muy transparente para usar elementos de
C++... pues el compilador es estático y preparado para integrarse bien con
windows.
Fijate como se accede a objetos COM y seguramente allí tendrás guías de como
hacer lo que necesitas (no dejes de preguntar en la lista de usuarios del MT
para ser bien asistido en esta duda).
En un momento (hace casi 10 años) me toco hacer una conexión como la que te
estás planteando (con un Smalltalk mío) para acceder a rutinas de compresión
por fractales (algo que estaba por "ponerse de moda" para comprimir
imágenes, en ese entonces).
El usar objetos C++ es algo menos frecuente de lo que parece.
En ese momento lo que hice fue definir los métodos que tenia la DLL como api
calls (buscando la dirección del binding con el nombre mangleado y
atachandoselo al método Smalltalk explícitamente), con un diseño similar al
que tiene VS.
Así accedía a las funciones de instanciación del objeto C++.
Luego de crearlo (y tener el miserable puntero :) accedía a la tabla virtual
y mapeaba la estructura del objeto cpuspus a una estructura dinámica
(parecida a las SelfDefinedStructures en VS) y a una clase Smalltalk
mapeando la tabla virtual con métodos definidos como API y a los que le
pichicateaba la dirección de las funciones encontradas en la tabla virtual.
Como te imaginarás todo funcionaba de maravillas... pero luego de hacerlo
(cosa indispensable para mantener mi sanidad y no tener que hacer wrappers
intermedios en C) llegue a la conclusión que no era algo digno de recomendar
:-)
Hoy en día es muy raro encontrar que quien expone una librería lo hace solo
en C++ (y no expone una API); pero si es ese tu caso; te recomendaría que
evalúes si podes evitar usarlo (para no heredar la obsolescencia
característica de este tipo de librerías).
suerte,
Ale.
----- Original Message -----
From: "kikote gregoris" <kikogregoris@...>
To: <smalltalking@...>
Sent: Monday, March 06, 2006 4:52 PM
Subject: [objetos] Objetos C++ con ST
> Hola gente
>
> Queira saber como se puede interactuar con una dll que contiene un
objeto c++ ?.
> Algo bien simple , una clase XXX que contiene el metodo
> int suma(int x , int y) .
>
> Lo quiero hacer desde el MT .
>
> saludos kiko
>
>
> ---------------------------------
> 1GB gratis, Antivirus y Antispam
> Correo Yahoo!, el mejor correo web del mundo
> Abrí tu cuenta aquí