Optim Data Privacy Providers  11.7.0
 All Data Structures Files Functions Variables Macros Groups Pages
Example for Provider_Preload()

The following example shows the usage of ODPP Loader.

#define LIBHANDLE HMODULE // Library Handle
#define FUNPTR FARPROC
#define LOADER_LIBNAME "ODPPLoader.11.7.dll"
#define PROVIDER_LIBNAME "ODPProvider.11.7.dll"
#define PROVIDER_LIBNAME_SIZE sizeof(PROVIDER_LIBNAME) - 1
#define LOADER_LIBNAME_SIZE sizeof(LOADER_LIBNAME) - 1
#define MAX_PATH_LEN 1024
// Function pointer for Provider_FrmwInit()
typedef int (*ODPP_FRMW_INIT)(DP_FRMW_PARAMS_DEF *pInitParams);
// Function pointer for Provider_Preload()
typedef int (*PROVIDER_PRELOAD)(char* pBinPath, int iBinPathBytes, DP_LIB_LIST* pLibList, int iArrCnt);
int main()
{
int retVal;
int iLibPathLen = 0; // Length of the ODPP binaries directory path
char* pLibPath = NULL; // Pointer to the ODPPLibPath buffer
char* pODPPLibEnvPath = NULL; // Pointer to get ODPPLIBL environment variable path
char chr = '\\';
char ODPPLibPath[MAX_PATH_LEN + 1]; // Path of the directory containing ODPP libraries.
char LoaderLibName[MAX_PATH_LEN + LOADER_LIBNAME_SIZE + 1]; //Absolute path of the Loader library
char ProviderLibName[MAX_PATH_LEN + PROVIDER_LIBNAME_SIZE + 1]; //Absolute path of the ODPP Provider Library
ODPP_FRMW_INIT pODPPFrmwInit;
PROVIDER_PRELOAD pProvider_Preload;
FUNPTR *pLoader = NULL, *pFrmwInit = NULL;
LIBHANDLE LoaderLibHandle, ProviderLibHandle;
// Clear the ODPPLibPath buffer
memset(ODPPLibPath, 0, sizeof(ODPPLibPath));
memset(LoaderLibName, 0, sizeof(LoaderLibName));
memset(ProviderLibName, 0, sizeof(ProviderLibName));
// Assign pointer to the buffer pointing to directory containing ODPP libraries
pLibPath = ODPPLibPath;
// Get the path of the ODPP BIN directory specified by the environment variable ODPPLIBL.
pODPPLibEnvPath = getenv("ODPPLIBL");
if(NULL == pODPPLibEnvPath)
{
printf("\nODPPLIBL Environment is not set");
return 0;
}
strncpy(pLibPath, pODPPLibEnvPath, MAX_PATH_LEN);
// Calculate the length of the path
iLibPathLen = (int) strlen(pLibPath);
//Add the '/' at the end of the path if not present
if(ODPPLibPath[iLibPathLen - 1] != chr)
{
ODPPLibPath[iLibPathLen] = chr;
iLibPathLen++;
ODPPLibPath[iLibPathLen] = '\0';
}
//Create the Loader library absolute path by adding Loader library name to the library path retrieved
strncpy(LoaderLibName, ODPPLibPath, iLibPathLen);
strcat(LoaderLibName, LOADER_LIBNAME);
// Dynamically load the Loader library and get the address of Provider_Preload() function.
// Windows - ODPPLoader.11.7.dll
// HPUX - libODPPLoader.sl.11.7
// AIX - libODPPLoader.11.7.a(libODPPLoader.so.11.7)
// For Remaining platforms - libODPPLoader.so.11.7
LoaderLibHandle = LoadLibraryA(LoaderLibName);
if(NULL == LoaderLibHandle)
{
printf("\nFailed to load the ODPP Loader Library");
return 0;
}
// Get the address of Provider_Preload()
pLoader = (FUNPTR *)&pProvider_Preload;
*pLoader = GetProcAddress(LoaderLibHandle, "Provider_PreLoad");
if(NULL == *pLoader)
{
printf("\nFailed to get address of Provider_Preload()");
return 0;
}
// Preload any ODPP library dependencies.
retVal = (pProvider_Preload)(pLibPath, iLibPathLen, NULL, 0);
if (retVal != 0)
{
printf("\nProvider_Preload() failed with error = %d", retVal);
return 0;
}
// Load the ODPP Provider Library dynamically and get the address of the ODPP API's
strncpy(ProviderLibName, ODPPLibPath, iLibPathLen);
strcat(ProviderLibName, PROVIDER_LIBNAME);
ProviderLibHandle = LoadLibraryA(ProviderLibName);
if(NULL == ProviderLibHandle)
{
printf("\nFailed to load ODPP Provider Library");
return 0;
}
pFrmwInit = (FUNPTR *)&pODPPFrmwInit;
*pFrmwInit = GetProcAddress(ProviderLibHandle, "Provider_FrmwInit");
if(NULL == *pFrmwInit)
{
printf("\nFailed to get address of Provider_FrmwInit()");
return 0;
}
// Initialize the Framework.
retVal = (pODPPFrmwInit)(NULL);
if(retVal != 0)
{
printf("\nODPP Framework Initialization failed with error = %d", retVal);
return 0;
}
return 0;
}