Цитата:
|
Не совсем так - буфер действительно возвратит
|
Нет, буфер ничего не возвращает, буфер - это область памяти.
Цитата:
|
ссылку на собственно строку
|
А вот член-функция 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.