Mostrando las entradas con la etiqueta delphi. Mostrar todas las entradas
Mostrando las entradas con la etiqueta delphi. Mostrar todas las entradas

jueves, abril 10, 2008

IDE para gays?

Si el subject del mail de invitación es "3 días de desarrollo puto" y el slogan es "Desarrollo para todos los gustos", qué es lo que podemos esperar? supongo que Borland lanzará un IDE orientado a la comunidad gay. Por eso dejé de programar en Delphi y me mudé a .Net.

Lo que es un hecho es que este tipo de errores ortográficos hacen ver muy mal a una empresa del tamaño de Borland, compañía que tiene ya unos cuantos años sin presentarnos algo realmente sorprendente.

miércoles, marzo 28, 2007

Usando DLL's hechas en Delphi desde una aplicación C#

Desde el día de ayer he tratado de utilizar una DLL hecha en Turbo Delphi desde una aplicación en C#, ¿por qué? simplemente porque las librerías gráficas se me facilitan más en Delphi, o más sinceramente porque nunca había tenido necesidad de utilizarlas en C#.

La necesidad se basa en una aplicación que capture la imagen de ciertas zonas de la pantalla, el problema que tenía es que al pasar los parámetros de la función no me tomaba los valores correctos, por ejemplo, para la variable X yo le pasaba un valor de 600 y tomaba un entero largo de 135313 que no sabía de donde sacaba, al estar buscando por toda la red me dí cuenta que lo único que me faltaba era agregar la claúsula stdcall al final de la función en Delphi, por tan poca cosa era.

Esta es la función de la DLL en delphi ya modificada:

procedure capturaPantalla(x,y,ar,ab,height,width: integer);stdcall;
var
rectangulo,dest : TRect;
imagen : TBitmap;
lienzo : TCanvas;
h : THandle;
error : integer;
begin
// ShowMessage('x:'+inttostr(x)+#13+'y:'+inttostr(y)+#13+'ar:'+inttostr(ar)+#13+'ab:'+inttostr(ab)+'height:'+inttostr(height)+'width:'+inttostr(width));
error:=28;
lienzo:=TCanvas.Create;
lienzo.Handle:=GetWindowDC(GetDesktopWindow);
h:=GetDesktopWindow;
rectangulo:=Rect(0,0,screen.Width,screen.Height);
if h<>0 then GetWindowRect(h,rectangulo);
dest:=Rect(0,0,width,height);
try
Imagen:= TBitmap.Create;
inc(error); //29
Imagen.Height:=height;//ab-y
inc(error); //30
Imagen.Width:=width;//ar-x;
inc(error); //31
rectangulo:=Rect(x,y,ar,ab);
inc(error); //32
Imagen.Canvas.CopyRect(dest,lienzo,rectangulo);
inc(error); //33
Imagen.SaveToFile('a.jpg');
inc(error); //35
except
on e : exception do
ShowMessage('Error en línea '+inttostr(error)+' : ' + e.Message +' | ' +e.ClassName);
end;
end;


Y así se invocó desde C#

[DllImport("libfgt.dll", EntryPoint = "capturaPantalla")]
public static extern void capturaPantalla(int x, int y, int ar, int ab, int height, int width);

Continuando con mi aplicación de Delphi, me tope con un nuevo dilema, cómo meter un form dentro de la DLL, fácil.

Solo hay que crear el nuevo form dentro del proyecto y únicamente tuve que crearlo dinámicamente dentro de la función:

procedure editaImagen;
var
editor : TForm1;
begin
try
editor := TForm1.Create(Application);
editor.ShowModal;
except
on E : Exception do
ShowMessage('Error: ' + e.Message);
end;
end;


jueves, marzo 15, 2007

C# VS Delphi Turbo

En un momento de esos que se dan pocos en la vida, en los que tiras flojera, me decidí a comparar los dos lenguajes/compiladores que estoy utilizando actualmente para comparar cuál de los dos efectúa más rápido un cálculo.

Para ello diseñé un código casi igual para ambos, digo casi porque hay algunas diferencias mínimas en el lenguaje, hay que tomar en consideración que ésto fué una prueba rápida y falta tomar en cuenta 2 cosas:

- Los algoritmos no son idénticos, en realidad por una sola instrucción está más optimizado el código en C#, por lo que el programa escrito en este lenguaje debería terminar más rápido.

- Los tipos de datos, que yo sepa, varían de tamaño entre C# y Delphi, por lo que la longitud diferente significaría la ventaja de un lenguaje, así que tendré que volver a probar utilizando datos de la misma longitud.

El último punto no debería ser tan significativo, ya que como programadores normalmente ocupamos las variables C#/Delphi estándard sin considerar su tamaño de manera muy purista (aunque deberíamos).

Aun así el resultado me sorprendió, yo hubiera esperado que la aplicación en .Net (C#) sería más rápida ya que, como mencioné antes, el código tiene una ligera optimización; además de que estaba siendo ejecutada en un ambiente Microsoft lo que en teoría le daría ventaja. Supongo que a pesar de ser hecha en un pseudo C, y estar corriendo en una supuesta plataforma optimizada para dicho framework, la diferencia radica en que C# corre sobre una máquina virtual o framework mientras que Delphi lo hace de manera nativa. Así que otra variable de la prueba sería implementar el código en Delphi.Net, sin embargo tampoco creo que cuente, porque a final de cuentas como comenté al principio, lo importante es tener códigos que se ejecuten más rápido.

viernes, febrero 23, 2007

Delphi para PHP?

La verdad no sé en esta ocasión que pensar, pasé varios años programando felizmente en Delphi desde su versión 1 hasta la 7, después vino el boom de las aplicaciones Web con lo que tuve que dejar el lenguaje de Borland debido a su falta de calidad para este tipo de aplicaciones; hecho que me llevó a programar en PHP, un lenguaje que he trabajado con bastante satisfacción debido a que solo requiero un editor de textos sencillo y es realmente potente.

El hecho de que Borland ofrezca ahora una versión de Delphi para PHP me asusta un poco, cuando ví que había una versión de Delphi para .Net la probé y si bien era sencillo y funcional, iba por detrás en cuanto a la oferta de Visual C# de Microsoft.

En esta ocasión será PHP el lenguaje que será desarrollado como RAD, al momento ni si quiera he tenido la necesidad de un IDE para lograr RAD en PHP, sin embargo, si me dá curiosidad lo que una compañía tan grande puede hacer por un lenguaje cuyo origen pensado precisamente en que no se requería un IDE para su desarrollo, no sé, me da mucha curiosidad aunque siento que la decepción se presentará de nuevo.

Mi temor principal se basa en la idea de que la aplicación generada en el IDE de Borland, será limitada en compatibilidad con cierta versión de PHP, que tendrá nuevos elementos en la sintáxis, sustitución de funciones estándard y otras cosas que hagan que la implantación de una aplicación en un ambiente de producción se dificulte, y por el match que podría hacerse con la versión de PHP me daría la impresión de que incluso se comprometa un poco la seguridad o compatibilidad con otras aplicaciones ya escritas en PHP.

En fin, estoy pensando sin conocer todavía el producto, de entrada haré lo posible por asistir a la presentación y en caso de poder ir ya platicaré al respecto.