In the following example the available Providers are enumerated and the details of each Provider is displayed.
short sCnt = 0;
short sPrvCount = 0;
pPrvDef = &PrvDef;
if(ODPPSUCCESS != retVal)
{
printf("Provider Enumerate failed Err=%#x", retVal);
return retVal;
}
printf("Provider Count=%d\n", sPrvCount);
if(NULL == pPrvDetails)
{
printf("\nFailed to allocate memory for Provider details list\n");
return ODPPFAILURE;
}
#ifndef USE_ODPP_MBCS_CHAR_CALLS
for(sCnt = 0; sCnt < sPrvCount; sCnt++)
{
if(NULL == (pPrvDetails + sCnt)->PD.pWC)
{
printf("\nMem Alloc failed for pWC of DP_PRV_DETAILS\n");
goto CleanPRVDetails;
}
memset((pPrvDetails + sCnt)->PD.pWC, 0,
sizeof(
DPPD_WC_SS));
(pPrvDetails + sCnt)->PD.pWC->pProviderName = (ODPP_WCHAR *) malloc ((pPrvDetails + sCnt)->iPrvNameBufBytes);
if(NULL == (pPrvDetails + sCnt)->PD.pWC->pProviderName)
{
printf("\nMem Alloc failed for pWC->Provider Name\n");
goto CleanPRVDetails;
}
memset((pPrvDetails + sCnt)->PD.pWC->pProviderName, 0, (pPrvDetails + sCnt)->iPrvNameBufBytes);
(pPrvDetails + sCnt)->PD.pWC->pDescription = (ODPP_WCHAR *) malloc ((pPrvDetails + sCnt)->iPrvDescBufBytes);
if(NULL == (pPrvDetails + sCnt)->PD.pWC->pDescription)
{
printf("\nMem Alloc failed for pWC->Provider Description\n");
goto CleanPRVDetails;
}
memset((pPrvDetails + sCnt)->PD.pWC->pDescription, 0, (pPrvDetails + sCnt)->iPrvDescBufBytes);
}
#else
for(sCnt=0; sCnt < sPrvCount; sCnt++)
{
if(NULL == (pPrvDetails + sCnt)->PD.pMC)
{
printf("\nMem Alloc failed for pMC of DP_PRV_DETAILS\n");
goto CleanPRVDetails;
}
memset((pPrvDetails + sCnt)->PD.pMC, 0,
sizeof(
DPPD_MC_SS));
(pPrvDetails + sCnt)->PD.pMC->pProviderName = (char *) malloc ((pPrvDetails + sCnt)->iPrvNameBufBytes);
if(NULL == (pPrvDetails + sCnt)->PD.pMC->pProviderName)
{
printf("\nMem Alloc failed for pMC->Provider Name\n");
goto CleanPRVDetails;
}
memset((pPrvDetails + sCnt)->PD.pMC->pProviderName, 0, (pPrvDetails + sCnt)->iPrvNameBufBytes);
(pPrvDetails + sCnt)->PD.pMC->pDescription = (char *) malloc ((pPrvDetails + sCnt)->iPrvDescBufBytes);
if(NULL == (pPrvDetails + sCnt)->PD.pMC->pDescription)
{
printf("\nMem Alloc failed for pMC->Provider Description\n");
goto CleanPRVDetails;
}
memset((pPrvDetails + sCnt)->PD.pMC->pDescription, 0, (pPrvDetails + sCnt)->iPrvDescBufBytes);
}
#endif
if(ODPPSUCCESS != retVal)
{
printf("Provider Enumerate failed Err=%#x", retVal);
goto CleanPRVDetails;
}
for(int iCnt=0; iCnt < sPrvCount; iCnt++)
{
#ifndef USE_ODPP_MBCS_CHAR_CALLS
wprintf(L
"\nProvider %d: %ws,\t%ws\n",iCnt, (pPrvDef->
pPrvDetails +iCnt)->PD.pWC->pProviderName,
#else
printf(
"\nProvider %d: %s,\t%s\n",iCnt, (pPrvDef->
pPrvDetails +iCnt)->PD.pMC->pProviderName,
#endif
}
Free the memory that has been allocated in the Provider definition if an error occurred.