visit Kofax web site

Initialisation

It is highly recommended to initialize SignWare, especially when running in a multithreaded environment.

Initialisation should at minimum set a license key and check if all required SignWare modules are loaded and accessible.

Note:
Initialisation is not thread safe, at maximum one thread may execute SignWare initialisation at any time

the code below performs a minimum initialisation.

Sample (C)
 static LONG gSpinlock = 0;
 static void lockGlobalSpinlock ()
 {
     while (InterlockedExchange(&gSpinlock, 1) != 0)
         Sleep (0);
 }

 static void unlockGlobalSpinlock ()
 {
     InterlockedExchange (&gSpinlock, 0);
 }

 /*
  * Initialize SignWare
  *
  * Initialisation cannot be called multiple times in parallel in a multithreaded environment 
  *
  * return int, SP_NOERR on success, else error code
  */
 int initSignWare()
 {
     /* 
      * Use s spinlock as sample thread synchronization  to assure t maximum one thread
      * is initializing SignWare at any time
      */
     lockGlobalSpinlock ();

     SPSignwareSetLicenseKey (license_key, strlen (license_key),
                              NULL, NULL, NULL, 0);

     SPINT32 iModules = 0;
     int rc;
     SPINT32 iDays = -1;
     int iMinModules = SP_SDK_LOADED;
     pSPREFERENCE_T pReference = 0;

     /* if you want to render Signatures */
     iMinModules |= SP_GRAPHICLIB_LOADED;

     /* If you want use GUI objects in a java environment */
     iMinModules |= SP_AWT_LOADED;

     rc = SPSignwareStatus(& iModules);
     /* cannot get status */
     if(rc != SP_NOERR) {
         unlockGlobalSpinlock ();
         return rc;
     }
     /* check required modules */
     if((iModules & iMinModules) != iMinModules) {
         unlockGlobalSpinlock ();
         return SP_LINKLIBRARYERR;
     }
     
     rc = SPSignwareDaysLM(& iDays);
     /* cannot query license expiry */
     if(rc != SP_NOERR) {
         unlockGlobalSpinlock ();
         return rc;
     }
     /* Check if the license is expired */
     if(iDays < 0) {
         unlockGlobalSpinlock ();
         return SP_LICENSEERR;
     }

      /* check License is available in this process */     
     rc = SPReferenceCreate(&pReference);
     if(rc != SP_NOERR) {
         unlockGlobalSpinlock ();
         return rc;
     }
     SPReferenceFree(&pReference);
     unlockGlobalSpinlock ();
     return SP_NOERR;
 }

 

Sample (Java)
 import de.softpro.signware.SPSignWare;

 /*
  * Initialize SignWare
  *
  * Initialisation cannot be called multiple times in parallel in a multithreaded environment 
  *
  * throws SPSignwareException on error
  *
  * Note: the synchronized keyword assures one thread can run this code at any time
  */
 synchronized void initSignWare() throws SPSignwareException, java.io.UnsupportedEncodingException
 {
     int iModules = 0;
     int rc;
     int iDays = -1;

     SPSignware.setLicenseKey (license_key.getBytes ("UTF-8"), null, null, null);

     int iMinModules = SPSignware.SP_SDK_LOADED;

     /* if you want to render Signatures */
     iMinModules |= SPSignware.SP_GRAPHICLIB_LOADED;

     /* If you want use GUI objects in a java environment */
     iMinModules |= SPSignware.SP_AWT_LOADED;

     iModules = SPSignware.loadedModules();

     /* check required modules */
     if((iModules & iMinModules) != iMinModules)
         throw  new SPSignwareException(SPSignwareException.SP_LINKLIBRARYERR);

     iDays = SPSignware.daysLM();
     /* Check if the license is expired */
     if(iDays < 0) 
         throw  new SPSignwareException(SPSignwareException.SP_LICENSEERR);

      /* check License is available in this process */     
     SPReference pReference = new SPReference();
 }
 

Sample (C#)
 using ACTIVESWLib;
 public class SignwareInit 
 {
     static private System.Object swInitLock = new System.Object();

     /*
      * Initialize SignWare
      *
      * Initialisation cannot be called multiple times in parallel in a multithreaded environment 
      *
      * returns 0 on success, else error code
      *
      * throws exception if SignWare cannot be instantiated
      */
     SPError initSignWare()
     {
         /* lock this code, at maximum one thread can run this code at any time */
         lock (swInitLock) {
             int iModules = 0;
             int rc;
             int iDays = -1;

             SPSignware spSignware  = new SPSignwareClass();
         
             /* If the Product ID needs to be setup then uncomment the next
              * line and replace the SignWare Product ID by the desired
              * Product ID
              */
              // spSignWare.SetLM2(809213154, 373825325);

             int iMinModules = (int) SPSignwareStatus.SPX_SDK_LOADED;
             /* if you want to render Signatures */
             iMinModules |= (int) SPSignwareStatus.SPX_GRAPHICLIB_LOADED;
         
             /* If you want use GUI objects in a java environment */
             iMinModules |= (int) SPSignwareStatus.SPX_AWT_LOADED;
         
             rc = spSignware.Status(out iModules);
             /* cannot get status */
             if(rc != (int) SPError.SPX_NOERR) return (SPError) rc;
         
             /* check required modules */
             if((iModules & iMinModules) != iMinModules)
                 return SPError.SPX_LINKLIBRARYERR;
         
             rc = spSignware.DaysLM(out iDays);
             /* cannot get expiry */
             if(rc != (int) SPError.SPX_NOERR) return (SPError) rc;
             /* Check if the license is expired */
             if(iDays < 0) 
                 return SPError.SPX_LICENSEERR;
         
             SPReference spReference = new SPReferenceClass();
             rc = spReference.Create();
             if(rc != (int) SPError.SPX_NOERR)
                 return (SPError) rc;
         }
         return SPError.SPX_NOERR;
     }
 }