| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
drkirocorp Ens


Registrado: 28 Abr 2006Mensajes: 29Ubicación: Comitan de Dominguez, Chiapas
|
Publicado: Mar 20 Abr, 2010 10:37 am Asunto: retornar array de enteros desde dll |
|
|
Hola, que tal;
tengo una dll que cargo de forma dinámica la cual tiene una función que recibe dos vectores dinámicos y retorna un vector de enteros de longitud 32, esto lo e podido hacer con delphi, pero necesito implementarlo en c++ builder, entonces la cuestión es ¿como puedo hacerlo?
código utilizado en delphi:
| Código: |
function MiFuncion (aVar1,aVar2: MiArrayDinamico): MiArrayDe32; stdcall external 'miDll.dll' index 1;
|
en donde MiArrayDinamico es un tipo de dato definido por mi lo que es un array dinámico de enteros y MiArrayDe32 es otro tipo de dato definido por mi por lo que es un array de enteros de longitud 32 el cual es lo que quiero que me retorne, gracias a todos de antemano _________________ Dr. Kiro - Corp®
Toda la magia en solo dos numero... 1 0... |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 20 Abr, 2010 11:29 pm Asunto: |
|
|
Si te apoyas en clases o estructuras para hacerlo, es fácil. Mira este ejemplo simple:
| Código: |
// Creamos el tipo de dato MyArray
struct MyArray32{
int A[32];
operator int*() {return A;}
int &operator [](int i) {return A[i];}
};
MyArray32 MiFuncion(int* a, int* b)
{
MyArray32 A;
for(int i=0; i<32; i++) A[i] = i; // un mero ejemplo de cargar el array...
return A;
}
|
Saludos. |
|
| Volver arriba |
|
 |
drkirocorp Ens


Registrado: 28 Abr 2006Mensajes: 29Ubicación: Comitan de Dominguez, Chiapas
|
Publicado: Mie 21 Abr, 2010 3:56 am Asunto: |
|
|
@escafandra gracias por tu respuesta y si que es interesante tu solución, y permiteme decirte que recordando un poco de teoria y de turbo c++ un profesor me comento que en turbo c++ los vectores al pasarlos como parámetros estos siempre se pasan por referencia, entonces lo que hice fue cambiar mi funcion agregándole el vector que necesito modificar (y regresar) como un parametro mas
| Código: |
MiArrayDinamico aA,aB;
int MyArrayEstatico[32];
MiFuncion(aA,aB,MyArrayEstatico);
|
y ya en mi funcion lo trabajo como un vector normal
| Código: | MyArrayEstatico[i] = 1; |
Muchas gracias, saludos _________________ Dr. Kiro - Corp®
Toda la magia en solo dos numero... 1 0... |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 21 Abr, 2010 8:36 am Asunto: |
|
|
Exacto, esa es la solución mas habitual y en la primera que pensé. Como tu pregunta iba encaminada a devolver un tipo específico creado por ti, opté por la solución más técnica de usar una estructura y ceñirme exactamente a tu pregunta.
| drkirocorp escribió: | ...un profesor me comento que en turbo c++ los vectores al pasarlos como parámetros estos siempre se pasan por referencia...
|
No es que los vectores se pasen por referencia sino que cuando pasas un array lo que realmente pasas es un puntero al primer elemento del array con lo que tu función tiene la dirección real del array original y no una copia. El resultado conceptual es la equivalencia al paso por referencia. Esto te sirve para cualquier variable. Si pasas su puntero es equivalente a un paso por referencia.
Saludos. |
|
| Volver arriba |
|
 |
drkirocorp Ens


Registrado: 28 Abr 2006Mensajes: 29Ubicación: Comitan de Dominguez, Chiapas
|
Publicado: Mie 21 Abr, 2010 9:41 pm Asunto: |
|
|
Muchas gracias, entendido...! _________________ Dr. Kiro - Corp®
Toda la magia en solo dos numero... 1 0... |
|
| Volver arriba |
|
 |
|