The following example shows the usage of ODPP Loader.
#define LIBHANDLE HMODULE // Library Handle
#define FUNPTR FARPROC
#define LOADER_LIBNAME "ODPPLoader.11.3.dll"
#define PROVIDER_LIBNAME "ODPProvider.11.3.dll"
#define PROVIDER_LIBNAME_SIZE sizeof(PROVIDER_LIBNAME) - 1
#define LOADER_LIBNAME_SIZE sizeof(LOADER_LIBNAME) - 1
#define MAX_PATH_LEN 1024
typedef int (*PROVIDER_PRELOAD)(
char* pBinPath,
int iBinPathBytes,
DP_LIB_LIST* pLibList,
int iArrCnt);
int main()
{
int retVal;
int iLibPathLen = 0;
char* pLibPath = NULL;
char* pODPPLibEnvPath = NULL;
char chr = '\\';
char ODPPLibPath[MAX_PATH_LEN + 1];
char LoaderLibName[MAX_PATH_LEN + LOADER_LIBNAME_SIZE + 1];
char ProviderLibName[MAX_PATH_LEN + PROVIDER_LIBNAME_SIZE + 1];
ODPP_FRMW_INIT pODPPFrmwInit;
PROVIDER_PRELOAD pProvider_Preload;
FUNPTR *pLoader = NULL, *pFrmwInit = NULL;
LIBHANDLE LoaderLibHandle, ProviderLibHandle;
memset(ODPPLibPath, 0, sizeof(ODPPLibPath));
memset(LoaderLibName, 0, sizeof(LoaderLibName));
memset(ProviderLibName, 0, sizeof(ProviderLibName));
pLibPath = ODPPLibPath;
pODPPLibEnvPath = getenv("ODPPLIBL");
if(NULL == pODPPLibEnvPath)
{
printf("\nODPPLIBL Environment is not set");
return 0;
}
strncpy(pLibPath, pODPPLibEnvPath, MAX_PATH_LEN);
iLibPathLen = (int) strlen(pLibPath);
if(ODPPLibPath[iLibPathLen - 1] != chr)
{
ODPPLibPath[iLibPathLen] = chr;
iLibPathLen++;
ODPPLibPath[iLibPathLen] = '\0';
}
strncpy(LoaderLibName, ODPPLibPath, iLibPathLen);
strcat(LoaderLibName, LOADER_LIBNAME);
LoaderLibHandle = LoadLibraryA(LoaderLibName);
if(NULL == LoaderLibHandle)
{
printf("\nFailed to load the ODPP Loader Library");
return 0;
}
pLoader = (FUNPTR *)&pProvider_Preload;
*pLoader = GetProcAddress(LoaderLibHandle, "Provider_PreLoad");
if(NULL == *pLoader)
{
printf("\nFailed to get address of Provider_Preload()");
return 0;
}
retVal = (pProvider_Preload)(pLibPath, iLibPathLen, NULL, 0);
if (retVal != 0)
{
printf("\nProvider_Preload() failed with error = %d", retVal);
return 0;
}
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;
}
retVal = (pODPPFrmwInit)(NULL);
if(retVal != 0)
{
printf("\nODPP Framework Initialization failed with error = %d", retVal);
return 0;
}
return 0;
}