Не получается перечислить пользователей
Hied; 1.12.04

Здравствуйте! Подскажите, пожалуйста, что в моем коде не так? Мне нужно получить всех пользователей в системе WinCC 6.0 SP2 и вывести их. Подскажите, как нужно делать правильно.


#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#pragma code("usegen.dll")
#include "usegenap.h"
#pragma code()
#pragma code("dmclient.dll")
#include "dmclient.h"
#pragma code()
BOOL fRet;
char ProjectName[_MAX_PATH];
char DSNName[MAX_DM_DSN_NAME + 1];
DM_PROJECT_INFO ProjectInfo;
LPDWORD UserCount;
fRet=DMGetRuntimeProject(ProjectName,_MAX_PATH+1,NULL);
if (fRet==FALSE)
{
MessageBox(NULL,"Невозможно определить имя проекта","Ошибка",MB_ICONQUESTION | MB_OK | MB_SYSTEMMODAL);
return;
}
fRet=DMGetProjectInformation(ProjectName,&ProjectInfo,NULL);
if (fRet==FALSE)
{
MessageBox(NULL,"Невозможно получить информацию о проекте","Ошибка",MB_ICONQUESTION | MB_OK | MB_SYSTEMMODAL);
return;
}
fRet=PWGENConnect (ProjectInfo.szDSNName,NULL);
if (fRet==FALSE)
{
MessageBox(NULL,"Невозможно соединиться с базой данных проекта","Ошибка",MB_ICONQUESTION | MB_OK | MB_SYSTEMMODAL);
return;
}
fRet=PWGENEnumUsers(UserCount,UserCallback,NULL,NULL);
if (fRet==FALSE)
{
MessageBox(NULL,"Невозможно перечислить юзеров","Ошибка",MB_ICONQUESTION | MB_OK | MB_SYSTEMMODAL);
return;
}
PWGENDisconnect(NULL);

Callback-функцию я пишу в Project functions:
#include "usegenap.h"
BOOL UserCallback(void* lpData, void* lpUser)
{
LPWGEN_USERINFO lpUserInfo=NULL;
lpUserInfo=(LPWGEN_USERINFO) lpData;
if (lpUserInfo==NULL)
{
printf(“error”);
return FALSE;
}
printf("%s",lpUserInfo->login);
return TRUE;
}
У меня из Callback-функции вообще ничего не печатается.
Re: Не получается перечислить пользователей
Alexis; 1.12.04

А ты уверен что винЦЦ умеет из скриптовых callback-ов printf делать? :)

Попробуй в своей UserCallback копировать куда-нибудь приходящие данные:
в Global Script\Project Functions
BOOL myUserCallback(PVOID lpUserInfo, PVOID lpUser)
{
#include "usegenap.h"
if ( lpUserInfo && lpUser ) memcpy(lpUser,lpUserInfo,sizeof(PWGEN_USERINFO));
return TRUE;
}

в обработчике кнопки:
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#pragma code("usegen.dll")
#include "usegenap.h"
#pragma code()
#pragma code("dmclient.dll")
#include "dmclient.h"
#pragma code()

CMN_ERROR dmError;
DM_PROJECT_INFO dmPrj;
DWORD UserCount=0;
PWGEN_USERINFO ua;

if ( FALSE==DMGetRuntimeProject(dmPrj.szProjectFile,_MAX_PATH,&dmError) )
{
printf("Невозможно определить имя проекта\r\n");
return;
}

if ( FALSE==DMGetProjectInformation(dmPrj.szProjectFile,&dmPrj,&dmError) )
{
printf("Невозможно получить информацию о проекте\r\n");
return;
}

if ( FALSE==PWGENConnect(dmPrj.szDSNName,&dmError) )
{
printf("Невозможно соединиться с базой данных проекта\r\n");
return;
}

if ( FALSE==PWGENEnumUsers(&UserCount,myUserCallback,&ua,&dmError) ) printf("Невозможно перечислить юзеров\r\n");
else
{
printf("ok %d\r\n",UserCount);
printf("last user %s\r\n",ua.login);
}
PWGENDisconnect(&dmError);
}

но это только одного пользователя получишь, а как получить всех - сам догадайся :))
Re: Не получается перечислить пользователей
Hied; 1.12.04

2Alexis:Я пытался в Callback-функции получить всех пользователей и не вышло. Подскажите, как это у вас реализовано.

Re: Не получается перечислить пользователей
Alexis; 2.12.04

Callback вызывается для каждого существующего пользователя - таким образом, необходимо извратится и как-то где-то сохранять пользователей в процессе вызовов callback-а...