Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A sample ActiveX Server Component Using ATL

0.00/5 (No votes)
14 Nov 2001 1  
Simple program for an Active Server Component that handles cookies

Introduction

ActiveX is a set of technologies from Microsoft that enables interactive content for the World Wide Web. With ActiveX, Web sites come alive with multimedia effects, interactive objects, and sophisticated applications that create a user experience comparable to that of high-quality CD-ROM titles.

A Cookie is a small packet of information used to store persistent state information on the user�s computer.

In this project, I build an ActiveX Server Component which will be invoked by an ASP to store the information in a cookie, and to access the cookie using ATL COM. The component will check for the existence of the cookie and create it if it's not present. The project is divided into seven steps. Do them in order because later steps depend on tasks you have completed in earlier steps.

  1. Create New Project
  2. Add ATL Object
  3. Adding a method for control 
  4. Build ASP for client
  5. Testing

1. Create New Project

First you will create the initial ATL project using the ATL COM AppWizard.

  1. In the Visual C++ environment, click New on the File menu, then choose the Projects tab.

  2. Select the ATL COM AppWizard.

  3. Type SimpleActiveX as the project name.

Your dialog box should look like this:

Figure 1. New project 

Click OK and the ATL COM AppWizard presents a dialog box offering several choices to configure the initial ATL project (figure 2). After that, click the Finish Button

Figure 2. Setting for ATL COM

2. Add ATL Object

To add an object to an ATL project, you use the ATL Object Wizard. Click New ATL Object on the Insert menu, and the ATL Object Wizard appears.

Figure 3. Insert ATL on project

In the first ATL Object Wizard dialog box, select the category of object you want to add to your current ATL project. Some of the options you can select are a basic COM object, a control tailored to work in Internet Explorer, and a property page. In this project, we will create a standard control, so set the category as Objects on the left, then on the right select ActiveX Server Component. Finally, click Next.

A set of property pages is displayed that allows you to configure the control you are inserting into your project. Type "Cookie" as the short name.  The other fields are automatically completed.

Figure 4. Properties of ActiveX Server Component

Click on the Attributes tab. Click Both for Threading Model, No for Aggregation and also click Support ISupportErrorInfo check box. 

Figure 5. Properties for Attributes tab.

Click ASP tab for default properties and then click OK button

Figure 6. Properties for ASP

3. Adding a Method to the Control

ICookies is the interface that contains your custom methods and properties (figure 7). The easiest way to add a method to this interface is to right-click it in ClassView and select Add Method and then it'll show dialog like figure 8.

Figure 7. Add Methode for this project

Figure 8. Properties for adding method

Type GetCookie for Method Name and [out,retval] BSTR *bVal for parameter. Finally, click OK

The source code for this method: GetCookie()

STDMETHODIMP CCookies::GetCookie(BSTR *bCookie)
{
	
	HRESULT hr;
	CComPtr<IRequestDictionary>pWriteDictionary;
	CComPtr<IRequestDictionary>pReadDictionary;
	
	
	if(bCookie==NULL) return E_POINTER;
	if(m_bOnStartPageCalled)
	{
			
		hr=m_piRequest->get_Cookies(&pReadDictionary);
		if(FAILED(hr)) 
			return S_FALSE;

		CComVariant vtIn(_T("LOGIN"));
		CComVariant vtOut;

		hr=pReadDictionary->get_Item(vtIn,&vtOut);
		if(FAILED(hr))
			return S_FALSE;

		hr=VariantChangeType(&vtOut,&vtOut,0,VT_BSTR);
		if(FAILED(hr))
			return S_FALSE;

		if(!wcslen(V_BSTR(&vtOut)))
		{
			CComVariant vtRespon;
			vtRespon="<html><body><center>Fill your name and password<br>"
			         "<form method=post action=setcookie.asp>";

			m_piResponse->Write(vtRespon);
			vtRespon="Name     : <input type=text name=user><br>Password : "
			         "<input type=password name=password><br>"
			         "<input type=submit value=OK>";
			m_piResponse->Write(vtRespon);
			vtRespon="</center></form></body></html>";
			m_piResponse->Write(vtRespon);

		}
		else
		{
			*bCookie=::SysAllocString(V_BSTR(&vtOut));
			CComVariant vtRespon;

			vtRespon="<html><body><center>Welcome ";
			m_piResponse->Write(vtRespon);
			
			vtRespon=*bCookie;
			m_piResponse->Write(vtRespon);
			
			vtRespon="<br></form></body></html>";
			m_piResponse->Write(vtRespon);
		}
	}

	return S_OK;
}

Finally, Build this project becomes a DLL application.

4. Build the ASP client

This code for client application, MyCookie.asp :

<%
    Set obj=Server.CreateObject("SimpleActiveX.Cookies")
    str=obj.GetCookie()
%>

<html>
    <title>
       Test ActiveX Server Component   
    </title>
    <body>
       The cookie stored is "<%=str%>"  
    </body>
</html>

and code for SetCookie.asp :

<% 
   response.cookies("LOGIN")=Request.form("user")
   response.cookies("LOGIN").expires=date+365
%>

<html>
   <title>
      SetCookie.asp
   </title>
   <body>
   </body>
   <center>
       Your login has been verified
   </center>
   </body> 	
</html>

5. Testing

To test this project, we must put files MyCookie.asp and SetCookie.asp on our ASP server. Firstly, we run MyCookie.asp. Fill name and Password. This case, information about name will be stored on cookie. So, if we want entry this website again, then we get our name automatically based on information on the cookie.

Figure 9. Test our Activex Server component.

Reference

Componet Object Model (COM) from Platform SDK, MSDN.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here