Передача CString в функцию IIS ServerSupportFunction в расширении ISAPI

Мне дали dll расширения ISAPI, скомпилированную в VC6, которая вызывает «ServerSupportFunction» через класс CHttpServerContext MFC. Код выглядит примерно так (предположим, что Ctx является объектом класса CHttpServerContext)

CString str;
str = "Content-Type: text/plain\r\n";
str += "Content-Length: 200\r\n";
str += "\r\n";

DWORD len = str.GetLength();

Ctx->ServerSupportFunction(HSE_REQ_SEND_RESPONSE_HEADER,NULL,
                           &len,
                           (LPWORD)(LPCTSTR)str);

при работе в Windows 2003 IIS6 этот код работает нормально. При работе в Windows 2008 IIS7 он возвращает код ошибки Windows ERROR_INVALID_PARAMETER.

если я изменю последний параметр на (LPWORD)"Content-Type: text/plain\r\n\r\n" вместо использования CString , вызов функции завершится успешно. dll компилируется в windows xp с VC6 со статическим MFC.

Поскольку я не хочу менять код dll, кто-нибудь знает причину, по которой эта проблема возникает в Windows 2008, и как ее можно решить?

Были ли какие-либо изменения в Windows 2008, влияющие на это? (Я не нашел) Может ли это быть связано с машинной кодовой страницей? Должна ли dll компилироваться по-другому? (возможно, без UNICODE)


person Ohad    schedule 22.06.2010    source источник


Ответы (1)


Я нашел проблему. Строка, отправленная исходным кодом, была "HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\n...." Когда "HTTP/1.0 200 OK\r\n" был удален, а строка содержала только заголовки HTTP, вызов работал отлично.

person Ohad    schedule 24.06.2010
comment
Вы также можете добавить это перед своим кодом: Ctx->m_bSendHeaders = FALSE; Это должно помешать MFC добавлять какие-либо собственные заголовки, кроме версии HTTP (HTTP/...). - person Nux; 07.12.2011