Показать сообщение отдельно
Старый 14.01.2005, 11:17   #8   
Registered User
 
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 45

Fisher вне форума Не в сети
Цитата:
Не совсем так - буфер действительно возвратит
Нет, буфер ничего не возвращает, буфер - это область памяти.
Цитата:
ссылку на собственно строку
А вот член-функция CString::GetBuffer() возвращает, но не ссылку, а указатель на начало области памяти упомянутой выше.
Цитата:
но потом его надо будет закрыть - то есть эта функция берет буфер на запись. Его нужно будет потом закрыть.
С этой задачей CString самостоятельно может справиться, так как размер строки не меняется.

Цитата:
нужно вызвать функцию c_str().
А что это за функция? Если имелась в виду функция std::string::c_str(), то она тут не применима, т.к. возвращает указатель на константную строку.

Цитата:
кроме того:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
то есть CreateProcess не изменяет appName - да и с чего-бы. [/B]
Здесь никто и не писал, что CreateProcess изменяется свой первый аргумент. Я говорил о втором аргументе. Система изменяет буфер, записывая ноль между именем файла и аргументами, чтобы получить две строки для внутреннго пользования. По завершении работы, функция восстанавливает буфер.
Впрочем за подробностями можно обратиться к PSDK.
  Ответить с цитированием