Builder c++ ---> visual c++

norline

Mitglied
Hallo,
wie kann ich der fogende Code unter visual c++ laufen lassen?
lieber c code und nicht c++.
danke im Voraus,

Code:
AnsiString GetTimeStampStr(void)
{
    unsigned long tickcnt, sec, msec, min;
    AnsiString min_str, sec_str, msec_str;

   
        tickcnt = GetTickCount() - TickCntRef;
        sec     = tickcnt / 1000;
        msec    = tickcnt % 1000;
        min     = sec / 60;
        sec     = sec % 60;

        min_str = (AnsiString)min;

        if (sec < 1)         sec_str = "00";
        else if (sec < 10)   sec_str = "0"+ (AnsiString)sec;
        else                 sec_str = (AnsiString)sec;

        if (msec < 1)        msec_str = "000";
        else if (msec < 10)  msec_str = "00"+ (AnsiString)msec;
        else if (msec < 100) msec_str = "0" + (AnsiString)msec;
        else                 msec_str = (AnsiString)msec;

        return (min_str + ":" + sec_str + "." + msec_str + "  ");

    PS.: TickCntRef = GetTickCount();
}
 
Hallo,

du musst die Klasse "AnsiString" ersetzen, die es nur bei Borland gibt. Ansonsten ist es doch zweckmäßiger C++ zu verwenden, weil der Umgang mit Strings einfacher ist.
Hier mal der Code:
C++:
#include <sstream>
#include <iomanip>

// ...

std::string GetTimeStampStr(void)
{
    unsigned long tickcnt, sec, msec, min;
   
    tickcnt = GetTickCount();
    sec     = tickcnt / 1000;
    msec    = tickcnt % 1000;
    min     = sec / 60;
    sec     = sec % 60;

    std::stringstream sstr;

    sstr << min << ":" 
         << std::setw(2) << std::setfill('0') << sec << "."
         << std::setw(3) << std::setfill('0') << msec;

    return sstr.str();
}
Gruß
MCoder
 
danke für deine Antwort,
Alos es geht darum, will halt die zeitstemple bei jeder Ausgabe zeigen, aber kriege das leider nicht hin, hab bis jetzt so gemacht
Code:
#include <sstream>
#include<windows.h>
#include <iomanip>
  
  char* GetTimeStampStr(void);   
  // void PrintDebug( std::string str);
   void PrintDebug(char *str);
//unsigned long TickCntRef;
   
 main()
{
//	 TickCntRef=GetTickCount();

	char*tmp;

	tmp=GetTimeStampStr();
	PrintDebug(tmp);
 
return 0;
}
//-------------------------------------------------------------------   
// std::string GetTimeStampStr(void)
    char* GetTimeStampStr(void)
 {
   
 unsigned long tickcnt, sec, msec, min;
   
 
  char* sstr;
 sstr=new(char);

  char* min_str, *sec_str, *msec_str;
min_str=new(char);
sec_str=new(char);
msec_str=new(char);

tickcnt = GetTickCount();//sol ich hier auch folgende schreiben
// tickcnt = GetTickCount()  - TickCntRef ?
  
 sec     = tickcnt / 1000;
  
 msec    = tickcnt % 1000;
  
 min     = sec / 60;
  
 sec     = sec % 60;
    
       
       // min_str = (char*)min;
	    sprintf(min_str,"%d",min);

        if (sec < 1)         sec_str = "00";
        else if (sec < 10)   sprintf(sec_str,"0%d",sec);
        else                 sprintf(sec_str,"%d",sec);

        if (msec < 1)        sprintf(msec_str,"000");
        else if (msec < 10)   sprintf(msec_str,"00");
        else if (msec < 100) sprintf(msec_str,"0%d",msec);
        else                  sprintf(msec_str,"%d",msec);

     
sprintf(sstr,"%s:%s.%s ",min_str,sec_str,msec_str);
     
 
  return (sstr);
 
 }
//----------------------------------------------------------------------------
 //void PrintDebug( std::string str)
	 void PrintDebug(char *str)
{
    printf(str);
	printf("\n");

}
//------------------------------------------------------------------------
 
Hallo,

das Bereitstellen des Speichers für die char-Buffer ist bei dir nicht richtig gelöst. Außerdem muss mit "new" reservierter Speicher nach Benutzung wieder mit "delete" freigegeben werden. Da aber die Länge des Strings für den TimeStamp feststeht, kann man auch eine feste Buffergröße definieren und auf "new" verzichten. Das Zusamenbauen des Ausgabestrings geht auch etwas weniger umständlich.
C++:
#include <windows.h>
#include <stdio.h>
  
char* GetTimeStampStr(char *buffer, unsigned long TickCntRef);   
void PrintDebug(char *str);
   
int  main()
{
    unsigned long TickCntRef = GetTickCount();
    char          buffer[20];

    Sleep(1000);

    PrintDebug(GetTimeStampStr(buffer, TickCntRef));
 
    return 0;
}

//-------------------------------------------------------------------   
char* GetTimeStampStr(char *buffer, unsigned long TickCntRef)
{
    unsigned long tickcnt, sec, msec, min;
      
    tickcnt = GetTickCount() - TickCntRef;
  
    sec     = tickcnt / 1000;
    msec    = tickcnt % 1000;
    min     = sec / 60;
    sec     = sec % 60;

    sprintf(buffer,"%d:%02d.%03d ",min, sec, msec);
    
    return buffer;

 }

//----------------------------------------------------------------------------
void PrintDebug(char *str)
{
    printf(str);
    printf("\n");
}
//------------------------------------------------------------------------
Gruß
MCoder
 
Zurück