Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    asmfan
    Не будет никаких преобразований. Поменяется только интерпертация из знакового в беззнаковое.
     
  2. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Во, а если там uint прописать и случай с msb рассмотреть?
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Не понял, size_t и есть же unsigned int. А что такое msb я не знаю.
    И вообще все эти приведения одно и тоже.
     
  4. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    msb-most significant bit здесь. /byte иногда/
    Нет.
    Всё ещё жду ответа по платформонезависимому (32/64-bit) приведению типов.
    Вопросы начинаются с #817
    Ну неужели нельзя запостить в топик для новичков и получить развёрнутый ответ от профи?
    int везде 4байта вот посему вопрос- через него в каких случаях конверсия пойдёт? где камни подводные могут быть? в каких способах?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    asmfan
    Я тебя не понимаю, все эти приведения одинаково работают, синтаксис только разный. Что ты хочешь? Ну а то, что size_t может дефайнится по-разному (хотя с чего это вдруг?) это правил приведения не меняет.
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Этот пример был сдёрнут с viva64 не помню с какой страницы конкретно. объяснено ничего не было, но суть-подвох(?). начал додумывать. если конверсия uint (uint32 как пример) в uint64 пойдёт через 4байнтый implicit int, то получится... так вот в каком случае такое может быть.
    К слову, как было сказано там же, но в другом месте, любая immediate константа как implicit в 4х байтный инт без явного приведения. В п.2 (для uint типа) будет implicit int действовать или нет? Что на счёт остальных пунктов?
    Никто не кодит под 32/64 переносимый код?
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    asmfan
    Я же говорю этои приведения абсолютно адинаково приводят. Тут зависит не от того какие операторы применяются, а от того как.

    Код (Text):
    1. size_t t = size_t((unsigned int)i);
    2. size_t t2 = size_t(i);
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    не понял ответа.
    меня интересует возможность скрытоко /implicit/ приведения к int32 любого типа (беззнакового тож) на любой из платформ есть? в п.2 например?
     
  9. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
  10. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    censored дык после прочтения пары... десятков) статей оттуда и помутился я.
    Лучше скажите любые беззнаковые меньше 64бит в те же беззнаковые но уже 64бита через знаковые 64бит расширяются как и везде и всегда? там всякий wrap-around или sign-ext. возникает где-нить?) крыша отъехала...
     
  11. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    вопрос по MFC:
    Код (Text):
    1. class CChildFrame : public CMDIChildwnd()
    2. {
    3. ...
    4. protected:
    5. CListCtrl m_wndListCtrl;
    6. ...
    7. };
    8. // на OnCreate нормально создается ListView в каждом окне
    9.  
    10. void CChildFrame::foo()
    11. {
    12. ...
    13.     m_wndListCtrl.InsertItem(&lvi);
    14. //здесь почему-то m_wndListCtrl = 0, поэтому assert срабатывет на IsWindow(m_wnd)
    15. }
    как исправить?
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    verelex
    Вообще-то mfc окна, как правило, нужно инициализировать(вызывать метод Create). Либо использовать другие методы инициализации(ресурс например).
     
  13. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Booster Так я же писал:
    Оказывается если поместить код в OnCreate() то все работает, а в других методах - нет(непонятно почему?).
    А мне надо динамически заполнять, а не только при создании.
    Может надо привязать метод foo к определенному сообщению, как OnCreate на WM_CREATE. Надо попробывать.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    verelex
    Аssert выскочил так как произошло обращение к не инициализированному контролу. Почему это произошло тебе виднее, может твоя функция вызывается раньше его инициализации. Если выложишь проект, то можно будет сказать точно.
     
  15. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    http://mynv.ru/test_mfc_1.zip
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    verelex
    А куда ты хотел засунуть добавление элементов?
     
  17. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    имя выбранной папки он должен занести в самую левую ячейку в толбец с названием 111.
    Если код
    Код (Text):
    1. FillListView(0,_T("xex"));
    добавить в OnCreate(), то заносит, а если в другой метод - не заносит почему-то.
    OK:
    Код (Text):
    1. int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    2. {
    3.     RECT rect;
    4.     CChildFrame::GetClientRect(&rect);
    5.     if (!m_wndListCtrl.CreateEx(LVS_EX_FULLROWSELECT,WS_CHILD | WS_VISIBLE | LVS_REPORT,rect,this,1))
    6.     {
    7.         TRACE0("Failed to create List control\n");
    8.         return -1;      // fail to create
    9.     }
    10.     InsertColumnInList();
    11.     FillListView(0,_T("xex")); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    12.     return 0;
    13. }
    ERROR:
    Код (Text):
    1. void CChildFrame::onAddFiles()
    2. {
    3.     //::MessageBox(0,_T("xex"),0,MB_OK);
    4.     CFolderDialog fd;
    5.     fd.DoModal();
    6.     CString PathName = fd.GetPathName();
    7.     //::MessageBox(0,PathName,0,MB_OK);
    8.     FillListView(0,PathName.GetBuffer()); // <<<<<<<<<<<<<<<<<<<<<<<<<,
    9. }
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    verelex
    Код (Text):
    1. mcb.cpp
    2. BEGIN_MESSAGE_MAP(CmcbApp, CWinApp)
    3.     ON_COMMAND(ID_APP_ABOUT, CmcbApp::OnAppAbout)
    4.     // Standard file based document commands
    5.     ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
    6.     ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
    7.     ON_COMMAND(ID_EDIT_ADDFILES, CChildFrame::onAddFiles) //Ахтунг, этого метода нет в CmcbApp
    8.     // Standard print setup command
    9.     ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
    10. END_MESSAGE_MAP()
    Перенеси это дело в ChildFrm.cpp
    Код (Text):
    1. ChildFrm.cpp
    2. BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
    3.     ON_COMMAND(ID_EDIT_ADDFILES, CChildFrame::onAddFiles) //Здесь он гораздо уместен.
    4.     ON_WM_CREATE()
    5.     ON_WM_SIZE()
    6. END_MESSAGE_MAP()
    Пытаться в одном классе вызвать метод другого, это конечно интересная мысль, но всё же.
     
  19. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Удалять пост не стал на всякий случай, вдруг потомкам пригодится, а написать, что вопрос решен в этом посте ты и сам мог.

    ПРОБЛЕМА УЖЕ РЕШЕНА

    Проблема такая:

    MyConsoleWinDbg.cpp
    Код (Text):
    1. #if _MSC_VER > 1000
    2. #pragma once
    3. #endif // _MSC_VER > 1000
    4.  
    5. #define UNICODE
    6. #define _UNICODE
    7.  
    8. #include "WinDbgCore.h"
    9. #include <windows.h>
    10.  
    11. int main(int argc, char* argv[])
    12. {
    13.     PWSTR Path = L"D:\\_Sources\\NOTEPAD.EXE";
    14.     StartDebugProcess(Path);
    15.     return 0;
    16. };
    WinDbgCore.cpp
    Код (Text):
    1. #define UNICODE
    2. #define _UNICODE
    3.  
    4. #include <windows.h>
    5.  
    6.  
    7. /* --- Глобальные переменные ----*/
    8.  
    9. static STARTUPINFO DebugStartupInfo;
    10. static PROCESS_INFORMATION DebugProcessInfo;
    11. static DEBUG_EVENT DebugEvent;
    12.  
    13.  
    14. /* --- макросы -----*/
    15.  
    16. #define def_OutEvent(EVENT)     if (DebugEvent == EVENT) puts(L"##EVENT");
    17.  
    18.  
    19. /* --- Функции ----*/
    20.  
    21. unsigned char StartDebugProcess(PWSTR PathFile)
    22. {
    23.     memset(&DebugStartupInfo, 0, sizeof(DebugStartupInfo));
    24.     DebugStartupInfo.cb = sizeof(DebugStartupInfo);
    25.     //STARTUPINFO si = { sizeof(si) };
    26.     memset(&DebugProcessInfo, 0, sizeof(DebugProcessInfo));
    27.     //DebugProcessInfo.cb = sizeof(DebugProcessInfo);
    28.  
    29.     // создаем процесс
    30.     if ( !CreateProcess( NULL,
    31.         PathFile,
    32.         0,
    33.         0,
    34.         FALSE,
    35.         DEBUG_ONLY_THIS_PROCESS | CREATE_SUSPENDED,
    36.         NULL,
    37.         NULL,
    38.         &DebugStartupInfo,
    39.         &DebugProcessInfo) ) return 1;   //Запустить процесс не удалось
    40.  
    41.     // ожидаем отладочные события, пока не возникнет завершение процесса
    42.     do {
    43.         WaitForDebugEvent(&DebugEvent, 0);
    44.     } while (DebugEvent.dwDebugEventCode != EXIT_PROCESS_DEBUG_EVENT);
    45.    
    46.     return 0;   // Создание отладки прошло успешно
    47. };
    WinDbgCore.h
    Код (Text):
    1. #define UNICODE
    2. #define _UNICODE
    3.  
    4. #include <windows.h>
    5.  
    6. unsigned char StartDebugProcess(PWSTR );
    Функция StartDebugProcess вызывается, но после вызова CreateProcess возникает исключение "нарушение доступа". Почему - не знаю. Наверняка ошибка в какой-то безделушке.
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    AndreyMust19
    Ты снова обильно раскидываешь макросы UNICODE? Неужели тебе нужен проект наполовину юникод, а наполовину мультибайт?

    Ну раз так, то наверно справишься и сам. А вообще учись пользоваться отладчиком, пригодиться.