HOWTO: Passing a License Key to Classes Generated by #import

Last reviewed: September 30, 1997
Article ID: Q170461
The information in this article applies to:
  • Microsoft Visual C++, 32-bit Editions, version 5.0

SUMMARY

The #import directive is used to incorporate information from a type library, but makes no provision for a license key. If you installed the OLE- DB SDK or Internet Information Server 3.0, then the license key is automatically created in the registry.

However, if your application is redistributed to machines that have not had either OLE-DB SDK or Internet Information Server 3.0 installed on them, you need to programmatically provide the ADO License Key. This is necessary regardless of the development environment you are using to manipulate ADO.

MORE INFORMATION

The following is a typical #import statement:

   #import "msado10.dll" no_namespace rename( "EOF", "adoEOF" )

When using #import to generate classes for ADO, your code to manipulate a recordset might look like this:

   HRESULT        hr;
   _ConnectionPtr pConn;
   _bstr_t        bstrConnect = SysAllocString( L"driver={sql server};"
                                                L"Database=pubs;"
                                                L"UID=sa;PWD=;" );

   hr = pConn.CreateInstance(__uuidof(Connection));
   if (!FAILED(hr))
      pConn->ConnectionString = bstrConnect;

This will work on any machine that has had the ADO 1.0 License Key already installed. However, if the license key is not installed, this code will not work. The code sample below is functionally equivalent but demonstrates how to create an ADO object using a license key.

Sample Code

   BSTR            LicKey;
   IClassFactory2  *pIUnknown = NULL;
   IUnknown        *pOuter    = NULL;
   HRESULT         hr;
   _ConnectionPtr  pConn;
   _bstr_t         bstrConnect = SysAllocString( L"driver={sql server};"
                                                 L"Database=pubs;"
                                                 L"UID=sa;PWD=;" );

   LicKey = SysAllocString( L"gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz" );

   //
   hr = CoGetClassObject( __uuidof(Connection),
                          CLSCTX_INPROC_SERVER,
                          NULL,
                          IID_IClassFactory2,
                          reinterpret_cast<void**>(&pIUnknown) );

   if( !FAILED( hr ) )
   {
      pIUnknown->CreateInstanceLic( pOuter,
                                    NULL,
                                    __uuidof(_Connection),
                                    LicKey,
                                    reinterpret_cast<void**> (&pConn) );
   }

   if( !FAILED( hr ) )
      pConn->ConnectionString = bstrConnect;

   SysFreeString( LicKey );

REFERENCES

For additional information, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q168122
   TITLE     : HOWTO: Redistribute ADO 1.0 or ADO/R 1.0 with OLE/DB 1.1
Keywords          : adoengdb adovc CLIss MfcDatabase
Version           : WINDOWS: 5.0; WINDOWS NT: 5.0
Platform          : NT WINDOWS
Issue type        : kbhowto


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: September 30, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.