Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Now that you have defined a license templatepolicy, you can need a license template to integrate LM-X with your application. First, try the following examples, which are already integrated

License file

To generate an XML license template:

  1. Create a template of the license you are interested in.
  2. Run the license generator provided with LM-X,

...

To use the LM-X API in your code and make the code compile, you must:

  • Include the lmx.h header file.
  • Add the include path for LM-X to the include directories.
  • Link with the liblmxclient library.

To perform these steps, do the following: 

For Windows, in Visual Studio: 

  1. Include this code into your application to import the LM-X functions:
    #include "lmx.h"
  2. Under Configuration Properties, select C/C++.
  3. Add the LM-X path, LM-X_dir\include, to the Additional Include Directories.
  4. Under Additional Dependencies, add the LM-X library path, for example:
    LM-X_dir\win32_x86\liblmxclient_mt.lib 

For Unix, at a command line:

  1. Include this code into your application to import the LM-X functions:
    #include "lmx.h"
  2. With the GCC compiler, specify an LM-X include directory:
    gcc -c –I LM-X_dir/include source_file
  3. When linking, specify the LM-X library paths, for example:
    gcc -o application objects LM-X_dir/lib/liblmxclient.a
  1. xmllicgen, as described in Generating licenses.

In the following example we assume the license will expire on January 1, 2018. This license defines one feature with version 1.0.

Code Block
<?xml version="1.0" encoding="UTF-8"?>
<LICENSEFILE>
  <FEATURE NAME="feature">
    <SETTING MAJOR_VERSION="1"/>
    <SETTING MINOR_VERSION="0"/>
    <SETTING END="2018-01-01"/>
  </FEATURE>
</LICENSEFILE>

To convert the above LM-X license template to a license file, run xmlicgen as shown below.

On Unix:

Panel

# xmllicgen license.xml

On Windows:

Panel

# xmllicgen.exe license.xml

The resulting file will be licens.lic. Xmllicgen will automatically replace your ".xml" extension with ".lic" and save the license next to your template.

Header file

First of all, you must include the required header, lmx.h, located in the include directory of your SDK.

Panel

#include "lmx.h"

If your project and LM-X SDK are in separate directories, remember to specify the include directory for your compiler. For example:

GCC:

Panel

gcc -I /usr/lmx-sdk-4.6.1/include/

MSCV:

Panel

cl /I “C:\Program Files\X-Formation\LM-X SDK v4.6.1 win64_x64\include\”

Commonly used functions

In the following examples we will present five commonly used LM-X API functions.

LMX_Init

The LMX_Init function initializes the protection system. This function creates a handle needed to use other LM- X API functions. It returns LMX_STATUS variable that indicates initialization status.

No Format
LMX_STATUS LMX_Init(LMX_HANDLE *p)


No Format
LMX_HANDLE LmxHandle;

if (LMX_Init(&LmxHandle) != LMX_SUCCESS)
{
  printf("Unable to initialize!\n");
  return 1;
}

LMX_STATUS LMX_SetOption(LMX_HANDLE LmxHandle,
                         LMX_SETTINGS eOption,
                         const void *pSetting);

LMX_SetOption

The LMX_SetOption function sets up flags that change licensing behavior prior to license checkout. This function returns LMX_STATUS variable that indicates the status of initialization.

The following example presents using LMX_SetOption to set the path to a license file.

No Format
LMX_SetOption(LmxHandle, LMX_OPT_LICENSE_PATH, ".");

LMX_Checkout

The LMX_Checkout function is one of the most important LMX API functions, because it checks out one or more licenses for a specific feature. This type of function requires that the feature name, version and the count of the features be defined as shown below.

No Format
LMX_STATUS LMX_Checkout(LMX_HANDLE LmxHandle, const char *szFeatureName, int nVerMajor, int nVerMinor, int nCount);

For example:

No Format
if (LMX_Checkout(LmxHandle, "feature", 1, 0, 1) != LMX_SUCCESS)
{
  printf("Unable to checkout\n");
  LMX_Free(LmxHandle);
  return 1;
}

LMX_Checkin

The LMX_Checkin function returns the licenses for a single checked out feature or all checked out features.

No Format
LMX_STATUS LMX_Checkin(LMX_HANDLE LmxHandle, const char *szFeatureName, int nCount);

LMX_Free

The LMX_Free function, which has an inverse effect to LMX_Init, frees any allocated memory used by the licensing system and closes any open connection to a license server.

No Format
void LMX_Free(LMX_HANDLE h)

The following example illustrates a basic example of an LM-X licensed application.

Panel

#include <stdio.h>
 

#include "lmx.h"
 

int main()

{

 LMX_HANDLE LmxHandle;


 

 if (LMX_Init(&LmxHandle) != LMX_SUCCESS)

 {

   printf("Unable to initialize!\n");

   return 1;

 }
 

 // Look for licenses in current directory.

 LMX_SetOption(LmxHandle, LMX_OPT_LICENSE_PATH, ".");

 if (LMX_Checkout(LmxHandle, "feature", 1, 0, 1) != LMX_SUCCESS)

 {

   printf("Unable to checkout!\n");

   LMX_Free(LmxHandle);

   return 1;

 }

 // Here you are safe to run your licensed features

 run_my_features();
 

 LMX_Checkin(LmxHandle, "feature", LMX_ALL_LICENSES);

 LMX_Free(LmxHandle);

 

 return 0;

}

You should save this as an example.c. What do you mean by that?

Running the application is straightforward and involves the following steps:

To run  an LM-X licensed application:

  1. Initialize the LM-X client library.
  2. Set the license path.
  3. Do the checkout.
  4. If the checkout succeeds, run your licensed feature.
  5. After work, do the checkin. what does it mean??? "After work"?
  6. Free your LM-X client library.

Compilation

Let's assume you saved your program source code as an example.c and installed your LM-X SDK in the default directory.

To compile your first program run the following:

GCC:

 

 

Panel

gcc -c -pthread -fPIC -Wall -Werror -fno-strict-aliasing -m64 -Wfatal-errors -Wno-unused-local-typedefs -Wno-vla -Wno-attributes -O2 -c -O2 -I/usr/lmx-sdk-4.6.1/include/ example.c
 

gcc -static-libgcc -o local local.o /usr/lmx-sdk-4.6.1/linux_x64/liblmxclient.a -pthread -lrt -ldl

 

 

MSVC:

 

 

Panel

cl /WX /MT /c /O2 -D_CRT_SECURE_NO_DEPRECATE /I “C:\Program Files\X-Formation\LM-X SDK v4.6.1 win64_x64\include\” example.c

 

link /WX /opt:noref example.obj “C:\Program Files\X-Formation\LM-X SDK v4.6.1 win64_x64\win64_x64\liblmxclient_mt.lib”

 

Running your application

Now you should have the following files in your current directory:

  • license.xml: your license template
  • license.lic: reaady to use the license, generated with xmllicgen
  • example c.: your first program source code
  • example/example.exe: your program executable

Now run your first LM-X licensed application.

 

 With your development environment ready to use the LM-X API, you will be able to implement license checking in your application code.