Инструмент почтового ящика Domino с NAMELookup2

Мы разработали инструменты для чтения электронных писем из почтовых ящиков 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. Я запустил инструмент с правами администратора.

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

Спасибо,


person Ramachandran    schedule 13.03.2019    source источник
comment
Возможно, он пытается преобразовать "Local" в реальный адрес сервера. Вы видите такое же поведение, когда первым аргументом является NULL? Кроме того, почему NumItems равно 2? Похоже, вы запрашиваете только FullName элемент.   -  person Dave Delay    schedule 13.03.2019
comment
Определенно существуют случаи, когда, пока имя, переданное в API, преобразуется в адрес сервера, Notes фактически не заботится, совпадает ли имя с идентификатором сервера, к которому он подключается. Итак, продвигая комментарий Дэйва еще на один шаг, одна из возможностей состоит в том, что в вашей старой тестовой среде была запись файла hosts для Local, которая возвращала IP-адрес сервера Domino, или даже документ соединения в names.nsf, который делает то же самое. Если ваша старая тестовая среда все еще существует, запустите клиент Notes и попробуйте функцию трассировки, используя «Local» в качестве имени сервера.   -  person Richard Schwartz    schedule 14.03.2019


Ответы (1)


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

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.

person Dave Delay    schedule 16.03.2019