Передача CString в функцию IIS ServerSupportFunction в расширении ISAPI - PullRequest
1 голос
/ 23 июня 2010

Мне дали расширение 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)

1 Ответ

1 голос
/ 25 июня 2010

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

...