Как передать строку в процедуру

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 30 ноя 2008.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как передать строку в процедуру в C++, MSVS 2008?
    Делаю так
    Код (Text):
    1. BOOL Procedure(char);
    2. .
    3. .
    4. .
    5. BOOL Procedure(char szText[256]) {
    6. .
    7. .
    8. .
    9. Procedure("xxx");
    Выдаёт
    Error 1 error C2664: 'Procedure' : cannot convert parameter from 'const char [4]' to 'char'

    P.S. Почему в C++ в случае MessageBox(0,L"xxx",0,MB_OK); без "L" не работает? Что "L" означает?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    В декларации должно быть так:

    BOOL Procedure(char array[]);
     
  3. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    L означает что строка юникодная, лучше использовать макрос TEXT
     
  4. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Так нужно всегда ("L" или "TEXT")?
    В моём случае так и останется - "xxx" без "L" и "TEXT"?
    Допустим я хочу внутри своей процедуры BOOL Procedure(char array[]); вызвать MessageBox с текстом из szText[256]. Как правильно записать MessageBox?
     
  5. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Если проект в ANSI:

    Код (Text):
    1. void ShowBox(const char *str)
    2. {
    3.     MessageBox(str, ...);
    4. }
    5.  
    6. void Caller()
    7. {
    8.     ShowBox("my message");
    9. }
    Ну а если UNICODE:

    Код (Text):
    1. void ShowBox(const wchar_t *str)
    2. {
    3.     MessageBox(str, ...);
    4. }
    5.  
    6. void Caller()
    7. {
    8.     ShowBox(L"my message");
    9. }
    Теперь, если ты хочешь сделать с макросами, в зависимости от установок проекта:

    Код (Text):
    1. void ShowBox(const TCHAR *str)
    2. {
    3.     MessageBox(str, ...);
    4. }
    5.  
    6. void Caller()
    7. {
    8.     ShowBox(_T("my message"));
    9. }
     
  6. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Зачем в ShowBox(const char *str) использовать const?
    Как быть если нужно передать str в lvc.pszText структуры LVCOLUMN lvc; ?

    Как в MSVS 2008 проект из UNICODE переключить в ANSI режим?
     
  7. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    vg
    чтобы повысить уверенность в том, что ShowBox не изменит строку, на которую указывает str.
    lvc.pszText = (LPSTR)str;

    p.s. прежде чем писать на С(++), советую выучить его. Судя по вопросам ты ни один учебник ты не читал дальше заглавия. (Не в обиду, это просто полезный совет).
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    void foo(const std::string &str);