Здравствуйте ZZ, Вы писали:
ZZ>>>Чисто практически.
ZZ>Знаю, но STARTUPINFOW в Windows.pas нету
( А самому описывать было лень... Но — SizeOf(STARTUPINFOA)=SizeOf(STARTUPINFOW) Или нет?? А в самих параметрах нет ни одной строки (ни ANSI ни Unicode) => разницы нет.
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
Так что разницы нет — весьма условное выражение, верное только если туда nil отдавать.
А вот когда будет вызываться RtlCreateProcessParameters — там уже это не все равно будет, и отлавливание такой ошибки — очень нетривиальный процесс.
sizeof действительно одинаковый, с чего ему разным быть.
А про STARTUPINFO полемика началась, после того как компилер стал ругаться, а в самом начале было неверное описание функции.
Разумеется, последние параметры не при чем, если бы они передавались структурой, была бы ошибка стека какая-нибудь, вплоть до Access Violation. То есть трабла-то в начале была, а именно, если имя юзера nil — запускается под текущим. А там и было nil, первый-то символ для UNICODE тут нулевой.