Ответы пользователя по тегу C++
  • Cocos2d-x для настольных компьютеров (Win, Mac, Linux) и производительность

    ertaquo
    @ertaquo
    1. cocos2d-x под Windows использует GLEW, работая с OpenGL напрямую (см. cocos2dx\platform\third_party\win32\OGLES\GL).
    Насчет других PC-платформ не знаю, но под Linux вроде все должно быть нормально (используется та же библиотека GLEW).
    2. Смысл есть. Портировать с Windows на Android — довольно просто: проект компилируется с Android NDK и поверх него цепляется обертка на Java. Менять ничего не приходилось. Насчет других мобильных платформ — не знаю, но думаю, тоже не слишком сложно.
    Ответ написан
    Комментировать
  • Интересные проверки для анализа Си/Си++ кода?

    ertaquo
    @ertaquo
    Было нечто вроде такого:
    char * pStr = "123";
    if (something)
    {
      pStr = new char[8];
      sprintf(pStr, "123\n");
    }
    ...
    delete pStr;
    

    Не знаю только, отлавливает ли PVS Studio подобное или нет.
    Ответ написан
    1 комментарий
  • Не компилируется helloworld.cpp в g++

    ertaquo
    @ertaquo
    Может попробовать собирать при помощи gcc 1.xx?
    Ответ написан
    Комментировать
  • Получить в .NET строку из С++ dll

    ertaquo
    @ertaquo
    А если что-то наподобие этого (источник), без заморочек со SetStdHandle и пайпами? К сожалению, C# знаю довольно плохо, так что могу только методом тыка советовать =\
    Ответ написан
  • Получить в .NET строку из С++ dll

    ertaquo
    @ertaquo
    Попробуйте не создавать по несколько раз экземпляр AnonymousPipeServerStream, а создать его один раз и один раз вызвать SetStdHandle, далее вызывая server.Flush();, затем функцию из дллки и чтение из пайпа. В-общем, что-то в этом роде (работоспособность не проверял):
    Copy Source | Copy HTML
    1. public static class ConsoleOutRedirector
    2. {
    3.     #region Constants
    4.  
    5.     private const Int32 STD_OUTPUT_HANDLE = -11;
    6.  
    7.     #endregion
    8.  
    9.     #region Externals
    10.  
    11.     [DllImport("Kernel32.dll")]
    12.     extern static Boolean SetStdHandle(Int32 nStdHandle, SafeHandleZeroOrMinusOneIsInvalid handle);
    13.     [DllImport("Kernel32.dll")]
    14.     extern static SafeFileHandle GetStdHandle(Int32 nStdHandle);
    15.  
    16.     #endregion
    17.  
    18.     #region Variables
    19.  
    20.     private static AnonymousPipeServerStream server = new AnonymousPipeServerStream(PipeDirection.Out);
    21.     private static client = new AnonymousPipeClientStream(PipeDirection.In, server.ClientSafePipeHandle);
    22.     private static bool First = true;
    23.  
    24.     #endregion
    25.  
    26.     #region Methods
    27.  
    28.     public static String GetOutput(Action action)
    29.     {
    30.         Debug.Assert(action != null);
    31.  
    32.         using (server)
    33.         {
    34.             if (First)
    35.             {
    36.                 var defaultHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    37.  
    38.                 Debug.Assert(!defaultHandle.IsInvalid);
    39.                 Debug.Assert(SetStdHandle(STD_OUTPUT_HANDLE, server.SafePipeHandle));
    40.                 try
    41.                 {
    42.                     action();
    43.                 }
    44.                 finally
    45.                 {
    46.                     Debug.Assert(SetStdHandle(STD_OUTPUT_HANDLE, defaultHandle));
    47.                 }
    48.  
    49.                 First = false;
    50.             }
    51.  
    52.             server.Flush();
    53.             client.Flush();
    54.  
    55.             using (client)
    56.             {
    57.                 using (var reader = new StreamReader(client))
    58.                 {
    59.                     using (var writer = new StringWriter())
    60.                     {
    61.                         while (reader.Peek() != -1)
    62.                         {
    63.                             writer.Write(Convert.ToChar(reader.Read()));
    64.                         }
    65.                         return writer.ToString();
    66.                     }
    67.                 }
    68.             }
    69.         }
    70.     }
    71.  
    72.     #endregion
    73. }
    74.  
    Ответ написан
  • Конвертация даты from char to time_t?

    ertaquo
    @ertaquo
    На просторах интернета видел такую функцию:
    long CMine::ConvertDateTime(CString buff)
    {
    int yy, mm, dd, hour, min, sec;
    struct tm when;
    long tme;

    sscanf(buff, "%d/%d/%d %d:%d:%d", &mm, &dd, &yy, &hour, &min, &sec);

    if( yy < 70 ) yy+= 100; // year 2000 compliant
    time(&tme);
    when = *localtime(&tme);
    when.tm_year = yy; when.tm_mon = mm-1; when.tm_mday = dd;
    when.tm_hour = hour; when.tm_min = min; when.tm_sec = sec;
    return( mktime(&when) );
    }

    Источник
    Написано не совсем красиво, но суть примерно понятна.
    Строка с датой и временем парсится через sscanf и из нее извлекаются числа. Если год меньше 70, то он относится к 21 веку и надо прибавить 100 лет (так как time_t начинается с 1 января 1970 года). Далее все это записываем в структуру tm и с помощью функции mktime преобразовываем в time_t. Минус данного способа — он не будет работать со строками, содержащими дату в некорректном формате.
    Ответ написан
    2 комментария