Versions Compared

Key

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

...

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

Panelcode
#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.

...

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 Formatcode
LMX_STATUS LMX_Init(LMX_HANDLE *p)

 

 

No Formatcode
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);

...

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

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

...

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 Formatcode
LMX_STATUS LMX_Checkout(LMX_HANDLE LmxHandle, const char *szFeatureName, int nVerMajor, int nVerMinor, int nCount);

For example:

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

...

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

 

No Formatcode
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 Formatcode
void LMX_Free(LMX_HANDLE h)

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

Panelcode
#include <stdio.h>

 #include

 
#include "lmx.h"

 int

 
int main()

{

 LMX

{
  LMX_HANDLE LmxHandle;

   if

 
  if (LMX_Init(&LmxHandle) != LMX_SUCCESS)

 {

   printf

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

    return 1;

 }
 

 

  }
 
  // Look for licenses in current directory.
 LMX

  LMX_SetOption(LmxHandle, LMX_OPT_LICENSE_PATH, ".");
 if

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

 {

   printf

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

    LMX_Free(LmxHandle);
   return

    return 1;

 }

 

  }
  // Here you are safe to run your licensed
features  run
 features
  run_my_features();

   LMX

 
  LMX_Checkin(LmxHandle, "feature", LMX_ALL_LICENSES);
 LMX

  LMX_Free(LmxHandle);
 return

  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  run an LM-X licensed application:

...

To compile your first program run the following:

GCC:

 

Panelcode
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

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

MSVC:

 

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

 

link

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

 

Running your application

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

...