Foros del Web » Programación para mayores de 30 ;) » Programación General »

Inquietud con memoria

Estas en el tema de Inquietud con memoria en el foro de Programación General en Foros del Web. Hola aqui pongo un codigo en el que estoy trabajando y a continuacion colocare mi duda. Unit1.h Código PHP: //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> ...
  #1 (permalink)  
Antiguo 02/07/2005, 20:39
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Inquietud con memoria

Hola aqui pongo un codigo en el que estoy trabajando y a continuacion colocare mi duda.

Unit1.h
Código PHP:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published// IDE-managed Components
        
TMainMenu *MainMenu1;
        
TMenuItem *Archivo1;
        
TMenuItem *Guardar1;
        
TMenuItem *N1;
        
TMenuItem *Salir1;
        
TMenuItem *E1;
        
TMenuItem *DeshacerCrtlz1;
        
TMenuItem *RehacerCrtlShitfZ1;
        
TMenuItem *N2;
        
TMenuItem *Cortar1;
        
TMenuItem *Copai1;
        
TMenuItem *PegarCtrlV1;
        
TMenuItem *Abrir1;
        
TPageControl *PageControl1;
        
TTabSheet *Cuentas;
        
TTabSheet *Estado;
        
TEdit *cuentains;
        
TButton *Button1;
        
TLabel *Label2;
        
TLabel *Label3;
        
TMenuItem *Configuarcin1;
        
TLabel *Label4;
        
TLabel *Label5;
        
TLabel *Label6;
        
TLabel *Label7;
        
TMenuItem *InformedeCuentas1;
        
TGroupBox *GroupBox1;
        
TLabel *Label1;
        
TGroupBox *GroupBox2;
        
TComboBox *ComboBox1;
        
TLabel *Label8;
        
TButton *Button2;
        
TButton *Button3;
        
TMemo *Memo1;
        
void __fastcall Abrir1Click(TObject *Sender);
        
void __fastcall Salir1Click(TObject *Sender);
        
void __fastcall Button1Click(TObject *Sender);
private: 
// User declarations
public:  // User declarations
        
__fastcall TForm1(TComponentOwner);
        
//estructura y funcion para cargar un archivo
        //a lista.
        
struct cuenta
        
{
         
int id;
         
char cta[30];
        };
        
void elementos(int &b);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 
--------------------------------------------------------------------------

Unit1.cpp

Código PHP:
//---------------------------------------------------------------------------
//include <ctype.h>
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "Unit1.h"
#include "struct.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
        : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Abrir1Click(TObject *Sender)
{
 
FILE *fp,*fr;
 
int b;
 if((
fp=fopen("C:\\cuentas.dat","a+b"))==NULL)
 {
  
//ShowMessage("ERROR MAn");
  
MessageBox(fp,"Error al abrir archivo","Error",1);
 }
 else
 {
 
TForm1::elementos(b);
 
PageControl1->Visible=True;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Salir1Click(TObject *Sender)
{
 exit(
0);        
}
//---------------------------------------------------------------------------
void TForm1::elementos(int &b)
{
 
//Función para saber los elementos que hay en el
 //archivo cuentas.dat
 
FILE *fp;
 
cuenta c;
 
b=0;
 if((
fp=fopen("C:\\cuentas.dat","rb"))==NULL)
 {
  
ShowMessage("Error al abrir el archivosss");
  exit(
0);
 }
 else
 {
  
fread(&c,sizeof(c),1,fp);
  while(!
feof(fp))
  {
   
b++;
   
fread(&c,sizeof(c),1,fp);
  }
 }
}
//---------------------------------------------------------------------------

//ShowMessage(ComboBox1->ItemIndex);
//Para tomar el item seleccionado del ComboBox

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
int b;
 
TForm1::elementos(b);
 
ShowMessage(b);
}
//--------------------------------------------------------------------------- 
Bien ahora como veran, cuento la cantidad de elementos que tiene el archivo
cuentas.dat, y lo almaceno en b.
Ahora cada vez que quiera usar b en cualquier parte del programa, tengo que
invocar si o si a la funcion de la clase TForm1::elementos(b);
Lo que quiero saber si se puede hacer es cuando hago click en abrir, ya tengo
la cantidad de elementos de b, y cuando quiero hacer otra accion con otro
boton, tengo que llamar a la funcion de nuevo para que b tome el valo de
la cantidad de elementos, ahora mi pregunta es, cuando yo hago click en abrir
y guardo esa cantidad en b, desde otro boton puedo accesar a ese espacio
de memoria donde esta almacenado b, sin hacer llamado a la funcion para que
vuelva a realizar el proceso de conteo?
Espero se me entienda lo que quiero decir.
Por las dudas lo vuelvo a explicar, al abrir, la cantidad de elementos se guarda
en b, ahora desde otro boton del programa yo quiero usar b, pero sin
llamar a la funcion que hace el conteo de la cantidad de elementos del archivo.
Ahora creo que esta mas clarito, bueno espero a ver que es lo puedo hacer,
probe con asignarle un * pero tampoco no me da.
Bueno Desde ya les agradezco el tiempo y las respuestas.
Salu2
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #2 (permalink)  
Antiguo 03/07/2005, 03:44
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
No podes porque b es una variable local que esta en la pila y cuando termina esa funcion ese variable ya no existe como tal. Tenes que usar una variable que sea visible en los dos ambitos donde quieras utilizarla, una solucion MUY sencilla es que uses una variable global.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 03/07/2005, 17:45
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
en este caso donde la deberia declarar a la variable para que sea global?, estoy trabajando con el builder 6
Gracias de nuevo.-
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #4 (permalink)  
Antiguo 04/07/2005, 01:49
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Por ejemplo arriba o abajo de:

TForm1 *Form1;

Que es una variable global tambien.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 04/07/2005, 18:35
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Te agradezco eternal, me sirvio de pelos.
Gracias.
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #6 (permalink)  
Antiguo 04/07/2005, 23:38
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
De nadas, me alegro de que te haya servido.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:18.