SIMPLE.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  *  This is a part of the Microsoft Source Code Samples.
  3.  *  Copyright 1996-1997 Microsoft Corporation.
  4.  *  All rights reserved.
  5.  *
  6.  *  The following example uses the minimum amount of code required to
  7.  *  utilize any licensing system.  This example is provided on the SDK
  8.  *  and can be used to familiarize oneself with a licensing system or
  9.  *  as a template for an application.  Note that the code exits if a
  10.  *  grant cannot be obtained.  Recall that this is strictly an
  11.  *  application's decision and is not dictated by any licensing system
  12.  *  which adheres to the LSAPI standard.
  13.  */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include "windows.h"
  17. /*
  18.  * Include the LSAPI header file.
  19.  */
  20. #include "lsapi.h"
  21. /*
  22.  * Define the product name, product version, and publisher name for
  23.  * use with the licensing calls.
  24.  */
  25. #define MYAPP_PRODUCT_NAME    "sample_product"
  26. #define MYAPP_PRODUCT_VERSION "1.0"
  27. #define MYAPP_PUBLISHER_NAME  "sample_publishers"
  28. /*
  29.  * Define the strings used to log a comment with the license system.
  30.  */
  31. #define MYAPP_REQUEST_LOG_COMMENT "Comment for the LSRequest call"
  32. #define MYAPP_RELEASE_LOG_COMMENT "Comment for the LSRelease call"
  33. /*
  34.  * Forward declarations
  35.  */
  36. void PrintErrors( LS_HANDLE handle, LS_STATUS_CODE errorCode );
  37. __cdecl main()
  38. {
  39.    /*
  40.     * LSAPI Variables
  41.     */
  42.    LS_ULONG        unitsGranted;
  43.    LS_HANDLE       licenseHandle;
  44.    LS_STATUS_CODE  status;
  45.    /************ the following code is for the LSAPI beta only! ************/
  46.    char            szProviderPath[ MAX_PATH ];
  47.    UINT            nChars;
  48.    /* install if necessary */
  49.    nChars = GetSystemDirectory( szProviderPath, sizeof( szProviderPath ) );
  50.    if ( 0 == nChars )
  51.    {
  52.       printf( "Can't get system directory, error %d.n", GetLastError() );
  53.    }
  54.    lstrcat( szProviderPath, "\mslsp32.dll" );
  55.    status = LSInstall( szProviderPath );
  56.    if ( LS_SUCCESS != status )
  57.    {
  58.       printf( "Cannot install LSAPI, error 0x%08lx.n", status );
  59.    }
  60.    /* add licenses for our product */
  61.    status = LSLicenseUnitsSet( LS_ANY,
  62.                                MYAPP_PUBLISHER_NAME,
  63.                                MYAPP_PRODUCT_NAME,
  64.                                MYAPP_PRODUCT_VERSION,
  65.                                LS_LICENSE_TYPE_NODE,
  66.                                LS_NULL,
  67.                                1,
  68.                                0,
  69.                                NULL );
  70.    if ( LS_SUCCESS != status )
  71.    {
  72.       printf( "Cannot install licenses, error 0x%lx.n", status );
  73.    }
  74.    /************ the above code is for the LSAPI beta only! ************/
  75.    /*
  76.     * Make the call to request a grant
  77.     */
  78.    status = LSRequest(
  79.          LS_ANY,                               /* Use any licensing system */
  80.          (LS_STR FAR *)MYAPP_PUBLISHER_NAME,   /* Publisher name           */
  81.          (LS_STR FAR *)MYAPP_PRODUCT_NAME,     /* Product name             */
  82.          (LS_STR FAR *)MYAPP_PRODUCT_VERSION,  /* Version number           */
  83.          LS_DEFAULT_UNITS,                     /* Let license figure units */
  84.          (LS_STR FAR *)MYAPP_REQUEST_LOG_COMMENT, /* Log comment         */
  85.          0,                                    /* No Challenge             */
  86.          &unitsGranted,                        /* # units granted          */
  87.          &licenseHandle );                     /* license context          */
  88.    /*
  89.     * Check whether we got a successful grant.  If not, then call a routine
  90.     * which prints out the error message, free the license handle, and do
  91.     * not continue running the application.
  92.     */
  93.    if ( LS_SUCCESS != status )
  94.       {
  95.       PrintErrors( licenseHandle, LS_USE_LAST );
  96.       LSFreeHandle( licenseHandle );
  97.       return(1);
  98.       }
  99.    /*
  100.     * Continue with the application.
  101.     */
  102.    printf("Hello Worldn");
  103.    /*
  104.     * We are now done with the application, so we must make a call
  105.     * to release the grant.
  106.     */
  107.    status = LSRelease(
  108.          licenseHandle,                        /* License context          */
  109.          LS_DEFAULT_UNITS,                     /* Let license figure units */
  110.          (LS_STR FAR *)MYAPP_RELEASE_LOG_COMMENT);/* Log comment         */
  111.    if ( LS_SUCCESS != status )
  112.       {
  113.       PrintErrors( licenseHandle, status );
  114.       LSFreeHandle( licenseHandle );
  115.       return( 1 );
  116.       }
  117.    /*
  118.     * Free the license handle.
  119.     */
  120.    LSFreeHandle( licenseHandle );
  121.    exit( 0 );
  122. }
  123. void PrintErrors( LS_HANDLE handle, LS_STATUS_CODE errorCode )
  124. {
  125.    LS_STATUS_CODE   status;
  126.    char             errorText[200];
  127.    errorText[0] = 0;
  128.    status = LSGetMessage( handle, errorCode, (LS_STR FAR *)errorText, 200);
  129.    if ( LS_TEXT_UNAVAILABLE == status )
  130.       printf("Error: No message catalog available.n");
  131.    else
  132.       if ( LS_UNKNOWN_STATUS == status )
  133.          printf("Error: Unknown error code was used.n");
  134.       else
  135.          printf("Error: %sn", errorText);
  136. }