PDA

Ver la Versión Completa : registros, clases y dll's


gushynet
16-10-2008, 06:01:49
Hola a todos, aqui va una duda sobre dll's y algo mas:

Supongamos que hemos declarado en pseudocódigo una clase y un registro (record) que tienen una propiedad y un campo de tipo entero respectivamente(por ponerle algo a la clase y al registro).

La pregunta es si estas estructuras internamente son representadas de manera similar por los distintos lenguajes(los que soportan estas estructuras) . Es decir, si la clase y el registro declarado en delphi ocupa lo mismo que declarado en c++ (por nombrar dos lenguajes) y si internamente son representados de la misma manera desde el punto de vista del sistema operativo y desde el punto de vista del compilador.

El motivo de la pregunta es que estoy viendo las dll's en delphi, y en todos los ejemplos que he visto las funciones y procedimientos siempre tienen como parámetros tipos simples y nunca objetos o tipos registros (punteros tampoco he visto), por lo que me preguntaba si a través del uso de las dll`s se puede dar esta situación:

tengo una dll(en principio hecha en delphi) llamada Operaciones que contiene procedimientos y funciones algunos de los cuales tienen uno o varios parámetros de tipo TObjeto.

TObjeto es una clase hecha en Delphi.

Si quisiera compartir esta dll con una persona que programa en c++builder ¿podría usarla si declara TObjeto exactamente igual en c++ para poder asi usar los porcedimientos y funciones de la dll que precisan del tipo TObjeto?


Suponiendo que se pudiera declarar una clase o un tipo de dato registro en una dll (en este momento no lo se) se podría desde otro lenguaje usar esos tipos declarados en la dll.


Gracias por las respuestas de antemano. Un saludo.

amezeta32
16-10-2008, 08:12:11
Saludos!!

Hola a todos, aqui va una duda sobre dll's y algo mas:

Supongamos que hemos declarado en pseudocódigo una clase y un registro (record) que tienen una propiedad y un campo de tipo entero respectivamente(por ponerle algo a la clase y al registro).

La pregunta es si estas estructuras internamente son representadas de manera similar por los distintos lenguajes(los que soportan estas estructuras) . Es decir, si la clase y el registro declarado en delphi ocupa lo mismo que declarado en c++ (por nombrar dos lenguajes) y si internamente son representados de la misma manera desde el punto de vista del sistema operativo y desde el punto de vista del compilador.

En cuanto a tamaño no debe de haber problema alguno, siempre y cuando los tipos sean equivalentes, lo que si te puede causar problemas es la alineación por ejemplo que en delphi este a byte y en builder a quaword por decir un ejemplo, yo he probado de delphi hacia builder usando el hpp que me genera delphi y no te tenido problema.

El motivo de la pregunta es que estoy viendo las dll's en delphi, y en todos los ejemplos que he visto las funciones y procedimientos siempre tienen como parámetros tipos simples y nunca objetos o tipos registros (punteros tampoco he visto), por lo que me preguntaba si a través del uso de las dll`s se puede dar esta situación:

Si existen punteros en delphi de hecho hasta donde se las clases vcl de delphi con en realidad punteros "ocultos", genera un pas y checa como te genera el hpp. En cuanto a pasar objetos, no debes de tener problemas.

tengo una dll(en principio hecha en delphi) llamada Operaciones que contiene procedimientos y funciones algunos de los cuales tienen uno o varios parámetros de tipo TObjeto.

TObjeto es una clase hecha en Delphi.

Si quisiera compartir esta dll con una persona que programa en c++builder ¿podría usarla si declara TObjeto exactamente igual en c++ para poder asi usar los porcedimientos y funciones de la dll que precisan del tipo TObjeto?

Sin ningun problema.

por ejemplo

En funcion.pas

procedure MyFuncion(var objeto:TComponent);
begin
end;

En funcion.hpp
void MyFuncion(TComponent* objeto)
{

}




Suponiendo que se pudiera declarar una clase o un tipo de dato registro en una dll (en este momento no lo se) se podría desde otro lenguaje usar esos tipos declarados en la dll.


Gracias por las respuestas de antemano. Un saludo.

de nada espero haberte ayudado

gushynet
16-10-2008, 11:25:14
Gracias por el cable, aunque no me ha quedado el tema claro:

- si tengo una clase hecha en delphi(u otro lenguaje) y la coloco en una dll ¿es posible instanciar objetos de esta clase en otros lenguajes?

Es decir, si en C++ tengo implementada la clase TCoche dentro de la dll, en delphi podría hacer algo como lo siguiente: usar en delphi los tipos creados en c++, como en este ejemplo, una clase.


var Objeto : TCoche;
.....
Objeto := TCoche.Create();
//procedimiento situado en la dll que acepta un parámetro de tipo TCoche
Operar(Objeto);




Gracias por la paciencia y por las respuestas.