Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2010
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Traducir llamado a funcion

Que tal,
Antes que nada les agradezco el tiempo que se toman por leer este post, mi duda es como traducir una funcion o mejor dicho, su declaracion que está hecha en Delphi, a su correspondiente en C++ builder.
Código Delphi [-]
procedure ApplyUpdates(DataSets: array of TCustomDADataSet); overload; virtual
Esta es la funcion en Delphi, como quedaria su correspondiente declaracion en C++ y ya entrados en gastos si saben como llamar a la funcion en programacion, pues seria formidable.
Muchas gracias.
__________________
Ya tengo Firma!
Responder Con Cita
  #2  
Antiguo 27-01-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Al tratarse de un método (de lo contrario no tendría "overload; virtual" ), no estoy seguro de que se pueda, ya que no hay una forma fácil de llamar a un método de un objeto Delphi desde C++, y aun menos a uno virtual ya que posiblemente habría que trastear con la tabla de métodos virtuales y eso ya son palabras mayores.

Aun así, es posible que sí se pueda, porque creo recordar que hay paquetes Delphi que pueden instalarse en Builder (Los de JfActiveSoft, si no recuerdo mal, aunque no estoy seguro de si estaban escritos en Pascal o en C++).

Si me dijeras acceder a un procedimiento o función (no método) de un archivo DLL escrito en Pascal, la cosa cambiaría ya que sólo habría que declarar la función C++ como "externa de pascal" y el compilador se encargaría del enlazado.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 27-01-2010
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Ñuño muchas gracias por tu respuesta, pero lo que estoy tratando de hacer es "traducir" una clase de Delphi a C++ builder, la cual tiene la declaracion que mencione antes.
Al decir o preguntar como llamar a esta funcion, seria desde el mismo Delphi, es decir, llamar a la funcion en Delphi desde Delphi para tener una idea de como hacerlo en C++, claro una vez que yo sepa como se "declara" dicha funcion en C++.
Gracias
__________________
Ya tengo Firma!
Responder Con Cita
  #4  
Antiguo 27-01-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
no estoy seguro...a ver si seria algo asi el prototipo

Código:
 
virtual overload void ApplyUpdates(TCustomDataSet *)
saludos.
Responder Con Cita
  #5  
Antiguo 27-01-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por coso Ver Mensaje
Hola,
no estoy seguro...a ver si seria algo asi el prototipo

Código:
 
virtual overload void ApplyUpdates(TCustomDataSet *)
saludos.
¿No faltarían unos corchetes y el nombre del parámetro?

Código:
 
virtual overload void ApplyUpdates(TCustomDataSet[] DataSets)
// Saludos
Responder Con Cita
  #6  
Antiguo 27-01-2010
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Muchas gracias para todos los que respondieron, pongo la solucion:

Código Delphi [-]
virtual void __fastcall ApplyUpdates(const TCustomDADataSet* const * DataSets, const int DataSets_Size)
en C++.

Saludos
__________________
Ya tengo Firma!
Responder Con Cita
  #7  
Antiguo 28-01-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por juanelo Ver Mensaje
Muchas gracias para todos los que respondieron, pongo la solucion:

Código Delphi [-]virtual void __fastcall ApplyUpdates(const TCustomDADataSet* const * DataSets, const int DataSets_Size)
No estoy muy seguro de que sea eso lo que quieres. Al declarar:
Código:
const TCustomDADataSet* const * DataSets
Estas declarando un puntero constante que apunta a otro puntero también constante, es cedir una array de punteros constantes. Eso quiere decir que el compilador no te va a dejar modificar los elementos de ese array. Si eso es lo que pretendes, entonces OK, en otro caso quizás sea mejor simplificarlo así:
Código:
TCustomDADataSet **DataSets
Como detalle poco importante no es necesario declarar una función como virtual si se está heredando de una clase madre en la que ya se declaró virtual, pues implicitamente la función heredada también será virtual aunque no se declare explicitamente.

Saludos.
Responder Con Cita
  #8  
Antiguo 28-01-2010
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Estas declarando un puntero constante que apunta a otro puntero también constante, es cedir una array de punteros constantes. Eso quiere decir que el compilador no te va a dejar modificar los elementos de ese array. Si eso es lo que pretendes, entonces OK.
Saludos.
Si claro, en realidad no se modifican los elementos del array (y ni debe de poderse).
Gracias.
__________________
Ya tengo Firma!
Responder Con Cita
  #9  
Antiguo 28-01-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
para roman

Cita:
¿No faltarían unos corchetes y el nombre del parámetro?
no, el nombre del parametro en el prototipo no es necesario, al menos antes no lo era, y los corchetes tampoco pues un array indeterminado es un puntero. Al tener que indicar las clases como punteros en c, le faltaria otro asterico: creo ahora que lo correcto seria (TCustomDatasets **), si se quiere modificar, como indica escafandra...y si no la inicial de un unico referenciador (TCustomDaDataSet *)...en fin, supongo que si te funciona esta bien. Un saludo.
Responder Con Cita
  #10  
Antiguo 28-01-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En realidad, en la definición de una función, un puntero puede ser representado por los corchetes que dice roman, es decir int* n, es lo mismo que int n[]. Como dice coso un array es lo mismo que un puntero (ese puntero apunta a su primer elemento).

const int* n; // es un puntero a un entero constante
int *const n; // es un puntero constante a un entero

La definición dada por juanelo debe funcionar correctamente.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No se ha llamado a Coinitialize ???? Juan Marcos Providers 11 05-12-2016 22:23:28
No se ha llamado a CoInitialize newlink OOP 4 10-12-2009 15:08:23
Llamado a una función de una dll Ricardo León Varios 8 16-12-2005 16:53:08
No se ha llamado a CoInitialize. ElCherchu Conexión con bases de datos 1 21-02-2005 15:54:39
Llamado de formas malcantar Varios 6 15-07-2003 19:27:14


La franja horaria es GMT +2. Ahora son las 05:04:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi