2010-06-22 19 views
1

J'ai reçu une extension ISAPI compilée dans VC6 qui appelle "ServerSupportFunction" via la classe CHttpServerContext du MFC. Le code ressemble (en supposant CTX objet de la classe CHttpServerContext)Passage de CString à la fonction IIS ServerSupportFunction dans l'extension ISAPI

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); 

lors de l'exécution sur Windows 2003 IIS6, ce code fonctionne très bien. Si en cours d'exécution sur Windows 2008 IIS7 il renvoie un code d'erreur windows de ERROR_INVALID_PARAMETER

si je change le dernier paramètre être (LPWORD) "Content-Type: text/plain \ r \ n \ r \ n" instaed de en utilisant CString, l'appel de fonction réussit. La DLL est compilée dans Windows XP avec VC6 avec MFC statique.

Depuis que je hésite à changer le code dll, quelqu'un sait-il une raison pour laquelle ce problème se produit dans Windows 2008 et comment il peut être résolu?

Y a-t-il eu des changements dans Windows 2008 affectant cela? (Je n'en ai trouvé aucun) Peut-il être lié à la page de codes de la machine? Est-ce que le dll compilé differenatly? (Peut-être sans UNICODE)

Répondre

1

J'ai trouvé le problème. La chaîne le code original envoyé était "HTTP/1.0 200 OK \ r \ nContent-Type: text/plain \ r \ n ...." Lorsque le "HTTP/1.0 200 OK \ r \ n" a été supprimé, et la chaîne ne contenait que des en-têtes HTTP, l'appel fonctionnait parfaitement bien.

+0

Vous pouvez également ajouter ceci avant votre code: 'Ctx-> m_bSendHeaders = FALSE;' Cela devrait empêcher MFC d'ajouter ses propres en-têtes sauf la version HTTP ("HTTP/..."). – Nux