• Lunes 7 de Julio de 2025, 00:10

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - diego.martinez

Páginas: 1 ... 6 7 [8] 9 10 ... 12
176
C/C++ / Re: Comunicar Programas
« en: Lunes 2 de Junio de 2008, 12:33 »
y por que no empleas un Buzon? o redireccionas las entradas?
 solo tienes que comunicarlos no?

177
C/C++ / Re: Liberar Memoria Localizada En Una Dll
« en: Viernes 23 de Mayo de 2008, 15:13 »
muchas gracias, era eso. Ya he podido arreglarlo.

anotado y aprendido.

178
C/C++ / Liberar Memoria Localizada En Una Dll
« en: Viernes 23 de Mayo de 2008, 14:36 »
Buenas:

Esta es la pregunta, si localizo memoria en una funcion de un procedimiento de una dll, y le paso el puntero a la aplicacion que esta usando esa instancia de dll, por que no puedo liberarla desde el programa anfitrion? es problema de los contextos?


gracias

179
C/C++ / Linkar Templates
« en: Miércoles 30 de Abril de 2008, 10:48 »
Buenas:

Recientemente me he encontrado con un problema al usar plantillas.

es un codigo de prueba:

Código: Text
  1.  
  2. //------------------------------------------------------ Main.cpp
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include "templatea.h"
  6.  
  7. int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lp,int nShowCmd)
  8. {
  9.  
  10.  A < C > Prueba;
  11.  
  12.   char s[100];
  13.  
  14.   sprintf(s,"Valor %d",Prueba.Get());
  15.   MessageBox(0,s,0,0);
  16.   return 0;
  17. }
  18.  
  19.  

Código: Text
  1.  
  2. //------------------------------------ TemplateA.h
  3. #include "templateb.h"
  4.  
  5. template <class T>
  6. class A
  7. {
  8. public:
  9.   T data;
  10.   int Get();
  11. };
  12.  
  13.  



Código: Text
  1.  
  2. //------------------------------------ TemplateA.cpp
  3. #include "templatea.h"
  4.  
  5. template <class T> int A<T>::Get() { return data.Get();}
  6.  
  7.  

Me da problemas al Linkar:
 main.obj : error LNK2019: unresolved external symbol "public: int __thiscall A<class C>::Get(void)" (?Get@?$A@VC@@@@QAEHXZ) referenced in function _WinMain@16
Debug/TemplatePru.cpp.exe : fatal error LNK1120: 1 unresolved externals


he leido que hay que usar export en estos casos, pero si lo pongo el VS2003 me da error de sintaxis.

que puedo hacer para poder poner el codigo en los cpp?

Muchas Gracias por anticipado.

180
C/C++ / Problema Con Declaración
« en: Lunes 21 de Abril de 2008, 12:06 »
Buenas:

Estoy intentando crear una aplicación que maneje microcontroladores, para ello estoy haciendo una interfaz para las direcciones de los registros.
Tengo unos arrays definidos asi:
Código: Text
  1.  
  2.  
  3.  //----------------------------------------------------------------- TACTL
  4.  
  5. .... // codigo identico a TB_CTL con diferentes direcciones
  6.  
  7.  //----------------------------------------------------------------- TB_CTL
  8.  unsigned short volatile * const TB_CTL     [] =
  9.  {
  10.           #if __MSP430_TB &#62;= 1
  11.                   &TBCCTL0,
  12.           #endif
  13.           #if __MSP430_TB &#62;= 2
  14.                   &TBCCTL1,
  15.           #endif
  16.           #if __MSP430_TB &#62;= 3
  17.                   &TBCCTL2,
  18.           #endif
  19.           #if __MSP430_TB &#62;= 4
  20.                   &TBCCTL3,
  21.           #endif
  22.           #if __MSP430_TB &#62;= 5
  23.                   &TBCCTL4,
  24.           #endif
  25.           #if __MSP430_TB &#62;= 6
  26.                   &TBCCTL5,
  27.           #endif
  28.           #if __MSP430_TB &#62;= 7
  29.                   &TBCCTL6
  30.           #endif
  31.  };
  32.  
  33.  
  34. //----------------------------------------------------------------- MAIN REGISTERS
  35.   unsigned short volatile * const MasterReg     []= { &TACTL,&TBCTL };
  36.  
  37. //----------------------------------------------------------------- MODULE REGISTERS
  38.   unsigned short volatile * const * TimerReg [2][2] = {  {TA_CCR,TA_CTL},{TB_CCR,TB_CTL} }; //&#60;&#60;----- PROBLEMA AQUI!
  39.  
  40.  
  41.  
  42.  

los arrays son direcciones de registros mapeados en memoria, asi que las direcciones son constantes, pero contienen datos Volatiles (que pueden cambiar por el hardware del microcontrolador)

La cosa funciona , pero la idea era crearlos constantes para que al optimizarlo, el acceso a estos registros quede lo mas escueto posible (a ser posible una instrucción).

El problema surge cuando intentamos dejarlo fijado en el .H que por supuesto nos da que "TimerReg is already defined" pero si lo ponemos en el cpp no nos lo optimiza.

La pregunta es:

¿por que no salta el "already defined" con los demas arrays?
(suponemos que es por que hace la sustitucion correctamente, pero entonces no saltaria en el TimeReg)

¿como podemos forzar que lo optimice sustituyendo las direcciones constantes?

estimo que el problema puede ser de la propia sintaxis de la declaración del array bidimensional TimerReg , que tiene muchos punteros.



Muchas gracias por anticipado.

181
C/C++ / Re: Duda Con String's,como Parámetro¡
« en: Martes 15 de Abril de 2008, 11:10 »
quizas el problema sea usar variables locales, localiza una nueva cadena con malloc y pasale el puntero a la nueva funcion.

182
C/C++ / Re: Verificacion De Variables
« en: Martes 8 de Abril de 2008, 10:19 »
lee la entrada como un string y luego verifica que todas las letras esten en el rango '0' a '9' inclusives.

para leer el string puedes usar :

scanf("%s",string_de_recepcion);

una vez sepas que es valida usas atoi(char *) para convertir a int

183
C/C++ / Re: Permutaciones, Combinaciones Posibles
« en: Jueves 6 de Marzo de 2008, 09:33 »
include<stdio.h>
# include<conio.h>
int k,n,p                 <<<<<<<<<<<<<<<< falta ;
long factorial(int k)
{
long resultado            <<<<<<<<<<<<<<<< falta ;
int k;
resultado=1                <<<<<<<<<<<<<<<< falta ;
for(k=1,k<=n,k=k+1)
resultado=resultado*k;
return(resultado)             <<<<<<<<<<<<<<<< falta ;
}
void main(void)
{
int n,p                            <<<<<<<<<<<<<<<< falta ;
printf("dame n,p");
scanf("%d,%d,&n,&p")        <<<<<<<<<<<<<<<< falta ;
if(n<=0)
printf("numero invalido");
else
if(p<=0)
printf("numero invalido");
else
if(p>n)
printf("numero invalido");
else

{
fx=factorial(n)/(factorial(n-p)*(factorial(p)) <<<<<<<<<<<<<<<< falta ;
printf("f(x)=%ld;fx)");
getch();
}

184
C/C++ / Escalabilidad En Servidor Tcpip
« en: Lunes 3 de Marzo de 2008, 09:03 »
Buenas:

Os cuento, hasta ahora cuando hago un servidor tcp-ip pongo en un hilo el Bind y el Listen.

Cuando entra una conexión, creo otro hilo para que gestione la lectura del Recv.

Asi pues si van entrando conexiones se van creando hilos para gestionar todas las recepciones.

La cosa es que mirando en Internet lei que esta opción tenia un problema de escalabilidad (a medida que entran conexiones los recursos se acumulan), sin embargo no se me ocurre como se podria hacer de otra forma.

Hay alguna idea para conseguir esta escalabilidad? o solo es cuestion de recursos de maquina?

185
C/C++ / Re: Temporizadores C++
« en: Lunes 11 de Febrero de 2008, 16:30 »
podrias usar un mutex y un thread que mire la hora que es y si es pasado x tiempo que se desbloquee o directamente acabar la thread y usar waitforsingleobject

186
C/C++ / Re: Vectores
« en: Miércoles 23 de Enero de 2008, 11:13 »
si te refieres a arrays seria:

//devuelve un array de bytes

BYTE * DevuelveArray()
{
BYTE Arr[8];
return Arr;
}

//si te refieres al TAD

std::vector<int> * DevuelveVector()
{
std::vector<int> * v=new vector<int>();

return v;
}

187
C/C++ / Re: Tetris U_u
« en: Martes 22 de Enero de 2008, 11:13 »
Cita de: "kitkat"

   /* Esta funcion se tiene que jecutar cuando la ficha a terminado de caer, hay que usar la funcion con_lineas (ya que se debe codificar la deteccion de lineas usando ese contador para eliminarlas del tablero)...pero no se me ocurre como hacerlo...ayudarme por favor....
    */
 
Ya he podido ver que es lo que necesita, estaba escondido en el codigo,

Tienes que iterar la matriz por cada linea, y por cada linea comprobar si toda la linea esta ocupada !=0.

Código: Text
  1. for (y=0;y&#60;Lineas;y++)
  2. {
  3. l=0;
  4. for (x=0;x&#60;SizeX;x++)
  5. if (Matrix[y][x]!=0) l++;
  6. if (l==SizeX) //la linea esta completa
  7.      //Do something
  8. }
  9.  
  10.  

188
C/C++ / Re: Contar las palabras de un archivo.
« en: Viernes 18 de Enero de 2008, 09:36 »
lo que puedes hacer es hacer ciclos segun lo encontrado:

o sea:

do {
While ( es un espacio);
while ( es una letra);
palabra++;
} while (!feof);

189
C/C++ / Re: Problemas Con Contador De Monedas
« en: Martes 15 de Enero de 2008, 09:03 »
para sacar las monedas que le debes devolver lo que tienes que hacer es ir descontando monedas de mayor a menor hasta que el importe sea 0

o sea,

while (devolver > 50)
{
devolver-=50;
MonedasDe50++;
}
while (devolver > 20)
{
devolver-=20;
MonedasDe20++;
}
while (devolver > 10)
{
devolver-=10;
MonedasDe10++;
}

etc

eso hara los cambios mas aproximados y reunidos, otra cosa seria si tuvieras que usar las monedas que te han dado en la maquina, entonces tendrias que ir descontando los tipos tambien y si no quedan monedas de ese tipo romper el while y pasar al siguiente.

while (devolver > 50)
{
if (Monedas[0]==0) break;
Monedas[0]--;
devolver-=50;
MonedasDe50++;
}
while (devolver > 20)
{
if (Monedas[1]==0) break;
Monedas[1]--;
devolver-=20;
MonedasDe20++;
}
while (devolver > 10)
{
if (Monedas[2]==0) break;
Monedas[2]--;
devolver-=10;
MonedasDe10++;
}

etc...

190
C/C++ / Re: Programacion Recursiva
« en: Jueves 10 de Enero de 2008, 09:36 »
lo mas facil es que en la funcion recursiva , le pases como parametros los punteros a los 2 arrays, y despues de operar incrementes la direccion en 1 en los 2 punteros.
La condicion de parada seria que alguno de ellos fuera NULL.

191
C/C++ / Tutorial Para Richedit En Win32 Api
« en: Viernes 21 de Diciembre de 2007, 10:55 »
Buenas:

alguien sabe de algun tutorial para usar RichEdit mediante la WIN32 API?

gracias

192
C/C++ / Re: Enter En C++
« en: Viernes 21 de Diciembre de 2007, 10:39 »
hombre, asi a ojo me da que no pilla el enter por que despues de recibir el caracter, incrementas la posicion de i, y luego lo compruebas o sea :


aaaaa\n
--------^ metes el caracter en la posicion i
         
incrementas i

aaaaa\n-
--------+^ el while comprueba el SIGUIENTE caracter que vete tu a saber lo que es


deberia ser:


void leercadena(tcadena & nombre)
{
int i=0;
while (1){
nombre=cin.get();
if (nombre=='\n') break;
i=i+1;
}
nombre[i-1]='\0';
}

193
Visual C++ / Re: Generación De Librería Dinámica Dll
« en: Miércoles 12 de Diciembre de 2007, 11:47 »
si usando visual c++ le das a crear nuevo proyecto Win32 y le das a generar DLL dinamica, practicamente solo tienes que leerte el proyecto que genera en el que te explica como hacer casi todo, para enlazar la libreria estatica vale con hacer

#pragma comment (lib,"nombrelibreria.lib");

si los necesitas para usar la lib, si, tendras que incluir los headers esos.

194
Visual C++ / Re: Iterador Para Std::map
« en: Lunes 3 de Diciembre de 2007, 08:55 »
pues era eso exactamente, estaban apuntando al mismo elemento, muchas gracias por la respuesta, que tonteria, si no hubiera estado de marathon programadora lo habria visto :P

PD: perdon, es que a veces me salen las palabras en ingles y no me acuerdo de decirlas en castellano :unsure:

195
Visual C++ / Iterador Para Std::map
« en: Jueves 29 de Noviembre de 2007, 09:24 »
Buenas:

Tengo un std::map con información sobre unos dispositivos que van dandose de alta a tiempos aleatorios.

el mapa es
Código: Text
  1.  
  2. std::map&#60;int,AGKDEVICE *&#62; Devices;
  3.  
  4.  

cuando recibo una petición de alta de un device:

Código: Text
  1.  
  2. if (Msg-&#62;GetTypeMsg()==TYPEMSG_PRESENCE)
  3.   {
  4.     if (AGKINSTALLATION::Get()-&#62;GetDevice(id)==NULL) //no esta dado de alta
  5.     {
  6.       time_t t=time(0);
  7.       AGKDEVICE * D=new AGKDEVICE();
  8.       Traza=D;
  9.         D-&#62;SetTime  (t);
  10.         D-&#62;SetID  (id);    
  11.       AGKINSTALLATION::Get()-&#62;AddDevice(D);
  12.     }
  13.   }
  14.  
  15.  

Agkinstallation solo es el mapa y AddDevice solo hace  

Código: Text
  1.  
  2. AGKINSTALLATION::AddDevice(D)
  3. { Devices[D-&#62;GetID()]=D; }
  4.  
  5.  

hasta aqui yo creo que todo bien.

ahora , quiero iterar todos los devices que me han llegado hasta ahora para ver a que hora llegaron:

Código: Text
  1.  
  2.   AGKINSTALLATION * I=AGKINSTALLATION::Get();
  3.   if (I-&#62;GetDevices().size()&#62;0)
  4.   {
  5.     std::map&#60;int,AGKDEVICE*&#62;Map=I-&#62;GetDevices();
  6.     std::map&#60;int,AGKDEVICE*&#62;::iterator it;
  7.     for(it = I-&#62;GetDevices().begin(); it != I-&#62;GetDevices().end(); ++it)
  8.     {
  9.      
  10.       AGKDEVICE* D=it-&#62;second;
  11.       if (D-&#62;IsDisabled()) continue;   &#60;&#60;&#60; EXCEPCION!!! D es NULO!
  12.  
  13.       if (t&#62;(time_t)(D-&#62;GetTime()+Elapse)) //timeout!
  14.       {
  15.                            ...
  16.                          }
  17.                 }
  18.         }
  19.  
  20.  

El problema me llega al iterar, el iterador lleva un Device Nulo cuando it = begin().
Debugeando , veo que en el Mapa esta bien insertado el Device.
Yo sospecho que el std::map pueda estar mal iterado, alguien sabe si es eso, y si lo es , como deberia hacer la iteración?

en Google siempre empiezan a iterar por Find, pero yo no se cuales estan dados de alta en el momento del checkeo.

Otra cosa, yo creia que en la adición del for debia ponerse it++ , sin embargo he visto en ejemplos del google que lo preincrementan. Por que es esto?


Muchas gracias.

196
C/C++ / Re: Rellenar Una Matriz Desde Un Fichero
« en: Lunes 26 de Noviembre de 2007, 09:46 »
tal como dice Profesor X, tienes que leer en modo texto , para ello, abre el fichero como "read text"

(fich = fopen(argv[1], "rt")   <- "rt"

luego para leer las filas puedes usar la funcion:

 fscanf( Handle_Fichero, "...", &v1,...);

puedes ver mejor como funciona en la doc, lo que tu querrias seria tal que:

fscanf( fich , "%d ", *(matriz+i));

197
C/C++ / Re: Semana Del Año
« en: Jueves 22 de Noviembre de 2007, 11:37 »
Bueno, al final lo saqué, lo dejo aqui por si alguien lo necesita  :hola:

Código: Text
  1.  
  2. int GetYearWeek()
  3. {
  4.   time_t to,tf;
  5.   tm * Fecha,*Fecha1;
  6.   unsigned int Week;
  7.     tf=time(0);   //fecha actual
  8.     Fecha=gmtime(&tf);
  9.     Fecha1=gmtime(&tf);
  10.  
  11.     Fecha1-&#62;tm_hour=0;
  12.     Fecha1-&#62;tm_min=0;
  13.     Fecha1-&#62;tm_sec=0;
  14.  
  15.     Fecha1-&#62;tm_mon=0;
  16.     Fecha1-&#62;tm_mday=1;
  17.     Fecha1-&#62;tm_yday=0;
  18.  
  19.     to=mktime(Fecha); //dia 1 de enero de este año
  20.     to-=Fecha1-&#62;tm_wday*24*60*60; //ajustamos el t segun el dia que sea el 1
  21.  
  22.     Fecha1=gmtime(&to);
  23.  
  24.     tf-=to; //segundos desde la semana del 1
  25.     tf/=3600; //horas desde semana del 1
  26.     tf/=24;    //dias desde semana del 1
  27.     if (Fecha-&#62;tm_year%4==0) tf++; //es bisiesto?
  28.     tf/=7;  //semanas
  29.     Week= (unsigned int)tf+1; //ajusto de 0 -&#62; 1
  30.     return Week;
  31. }
  32.  
  33.  

198
C/C++ / Semana Del Año
« en: Jueves 22 de Noviembre de 2007, 10:50 »
Buenas:

estoy desarrollando una funcion para calcular la actual semana del año.

alguien sabe como hacer el algoritmo?

La idea es que dandole un TM o time_t pueda dar la semana del mes en el que estamos, la cosa se complica con los años bisiestos y todo eso, sabeis donde puede estar la formula?

199
C/C++ / Re: Programa De Ordenamiento De Numeros
« en: Viernes 16 de Noviembre de 2007, 01:49 »
en modo consola puedes usar la instruccion scanf()
mirate en google como se usa, es sencillito

en c++ tambien puedes usar los flujos de entrada

cin >> variable;

200
Visual C++ / Re: Singleton
« en: Miércoles 14 de Noviembre de 2007, 16:20 »
pues si, perfecto, era ese el fallo

muchas gracias.  :lol:

Páginas: 1 ... 6 7 [8] 9 10 ... 12