Инструмент почтового ящика Domino завис с NAMELookup2 - PullRequest
2 голосов
/ 13 марта 2019

Мы разработали инструменты для чтения электронных писем из почтовых ящиков Domino и записи их в отдельный файл на локальном диске (это выглядит как резервная копия). Недавно мы создали новую тестовую среду domino 9 в нашей лаборатории. Но наши инструменты не работают должным образом с нашей новой рабочей средой домино. Чтобы определить проблему, связанную с этой проблемой, я добавил несколько журналов отладки, и похоже, что элемент управления зависает с функцией «NAMELookup2». Здесь я добавил фрагмент кода,

DHANDLE  hLookup;
char   *pLookup;
if (NAMELookup2("Local", 0, 1, "$users", 1, dominoUser, 2, "FullName", &hLookup) == NOERROR) // hunged with this line
{
     pLookup = (char *) OSLockObject(hLookup);
}

Тот же инструмент отлично работает с другой нашей тестовой средой. Итак, я думаю, что нет проблем с кодом. Я подозреваю, что, возможно, проблема с созданием нашей новой настройки рабочей среды, или, возможно, пропустил предоставление пользователям своего рода разрешения, или, может быть, я пропустил добавление почтовых ящиков где-то и т. Д.

Примечание:

  1. Я запустил инструмент с правами администратора.

Было бы замечательно, если бы кто-нибудь дал какое-то указание на это.

Спасибо

1 Ответ

0 голосов
/ 16 марта 2019

См. Эту страницу NAMELookup2 для справки. Функция объявлена ​​как:

STATUS LNPUBLIC NAMELookup2(const char far *ServerName, DWORD Flags,
    WORD NumNameSpaces, const char far *NameSpaces,
    WORD NumNames, const char far *Names,
    WORD NumItems, const char far *Items,
    DHANDLE far *rethBuffer);

где NumItems - количество имен элементов с нулевым символом в конце, начинающихся с адреса Items. Фрагмент кода в вашем вопросе передает одно имя элемента ("FullName"), но устанавливает NumItems в 2. Это явно неверно и может объяснить зависание. NumItems должно быть 1.

Я также с подозрением отношусь к аргументу ServerName. Документация рекомендует передавать NULL, если вы хотите выполнить локальный поиск. Передача "Local" может быть другим способом сделать то же самое, но вы должны изменить свой код в любом случае. Я рекомендую изменить первый аргумент на NULL.

...