home *** CD-ROM | disk | FTP | other *** search
- /*++
-
- Copyright (c) 1997 Microsoft Corporation
-
- Module Name: InvokObj.cpp
-
- Abstract:
-
- ISAPI Extension sample to invoke an automation server method
-
- --*/
-
- #define _WIN32_WINNT 0x0400
- #include <windows.h>
- #include <httpext.h>
-
-
- //
- // Import type library information about the COM object
- //
-
- #import "GetUserName.dll"
-
-
- BOOL WINAPI
- GetExtensionVersion(
- HSE_VERSION_INFO *pVer
- )
- /*++
-
- Purpose:
-
- This is required ISAPI Extension DLL entry point.
-
- Arguments:
-
- pVer - poins to extension version info structure
-
- Returns:
-
- always returns TRUE
-
- --*/
- {
- pVer->dwExtensionVersion = MAKELONG( HSE_VERSION_MINOR,
- HSE_VERSION_MAJOR );
- lstrcpyn( pVer->lpszExtensionDesc,
- "InvokObj ISAPI Sample", HSE_MAX_EXT_DLL_NAME_LEN );
-
- //
- // Ensure COM is initialized
- //
-
- CoInitialize( NULL );
-
- return TRUE;
- }
-
-
- DWORD WINAPI
- HttpExtensionProc(
- EXTENSION_CONTROL_BLOCK *pECB
- )
- /*++
-
- Purpose:
-
- Demonstrate how to create an instance of the automation object
- using VC++ 5.0 extensions and how to invoke its method.
-
- Arguments:
-
- pECB - pointer to the extenstion control block
-
- Returns:
-
- HSE_STATUS_SUCCESS on successful transmission completion
- HSE_STATUS_ERROR on failure
-
- --*/
- {
- char szOutput[1024];
- DWORD dwBuffSize;
- GETUSERNAMELib::IGetUserNameObjPtr pItf;
- HSE_SEND_HEADER_EX_INFO HeaderExInfo;
- HRESULT hr;
-
- //
- // Send headers back to client
- //
-
- HeaderExInfo.pszStatus = "200 OK";
- HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus );
- HeaderExInfo.pszHeader = "Content-type: text/html\r\n\r\n";
- HeaderExInfo.cchHeader = strlen( HeaderExInfo.pszHeader );
- HeaderExInfo.fKeepConn = FALSE;
-
- pECB->ServerSupportFunction( pECB->ConnID,
- HSE_REQ_SEND_RESPONSE_HEADER_EX,
- &HeaderExInfo, NULL, NULL );
-
- //
- // Initialize an instance of the automation server
- //
-
- hr = pItf.CreateInstance( L"GetUserNameObj.GetUserNameObj.1" );
-
- if ( FAILED( hr ) )
- {
- wsprintf( szOutput, "<h1>Error.</h1><hr>Attempt to create instance "
- "of GetUserNameObj object failed with error %x.", hr );
- dwBuffSize = strlen( szOutput );
-
- pECB->WriteClient( pECB->ConnID, szOutput, &dwBuffSize, 0 );
-
- return HSE_STATUS_SUCCESS;
- }
-
-
- //
- // Build the output using the result of the call to
- // GetUserNameObj's GetMyName method
- //
-
- wsprintf( szOutput, "<h1>GetUserNameObj successfully instantiated."
- "</h1><hr>The GetMyName method returned %s.",
- (char *)pItf->GetMyName( ) );
-
-
- //
- // Send the output back to the client
- //
-
- dwBuffSize = strlen( szOutput );
- pECB->WriteClient( pECB->ConnID, szOutput, &dwBuffSize, 0 );
-
-
- return HSE_STATUS_SUCCESS;
- }
-
-
- BOOL WINAPI
- TerminateExtension(
- DWORD dwFlags
- )
- /*++
-
- Purpose:
-
- This is optional ISAPI extension DLL entry point.
- If present, it will be called before unloading the DLL,
- giving it a chance to perform any shutdown procedures.
-
- Arguments:
-
- dwFlags - specifies whether the DLL can refuse to unload or not
-
- Returns:
-
- TRUE, if the DLL can be unloaded
-
- --*/
- {
- //
- // Balance the call to CoInitialize that we made in GetExtensionVersion
- //
-
- CoUninitialize( );
-
- //
- // It is now OK to unload
- //
-
- return TRUE;
- }
-
-
-
-