Ошибка _tcscmp в C ++ DLL - PullRequest
       24

Ошибка _tcscmp в C ++ DLL

1 голос
/ 05 апреля 2011

Я пишу функцию DLL с именем ADAuthenticate, которая будет аутентифицировать пользователя в Active Directory и проверять определенный атрибут пользователя, если он / она существует.Если администратор выполняет аутентификацию, я не хочу, чтобы функция выполняла поиск по ldap, поэтому у меня есть следующий оператор if:

if (_tcsicmp(username, TEXT("administrator")) != 0 && _tcscmp(attrs[0], TEXT("")) != 0)
                {
                    // Search for specific attributes
                    ldap_response = ldap_search_s(ldap, domain, LDAP_SCOPE_SUBTREE, search, attrs, 0, &ldap_msg);

                    if (ldap_response != LDAP_SUCCESS)
                        MessageBox(h_wnd, ldap_err2string(ldap_response), TEXT("ERROR - ldap_search_s"), MB_OK);
                    else if ((new_ldap_msg = ldap_first_entry(ldap, ldap_msg)) != NULL)
                    {
                        do 
                        {
                            // Append a pipe character if more than one attribute is requested
                            if (count > 0)
                                _tcscpy(ret_val, TEXT("|"));

                            _tcscpy(ret_val, *(ldap_get_values(ldap, new_ldap_msg, attrs[count++])));
                        } while ((new_ldap_msg = ldap_next_entry(ldap, ldap_msg)) != NULL);
                    }
                }

В операторе if, если я удалю одну из операций сравнения строк(либо один), он отлично работает.Как только я соединяю их вместе или даже во вложенных операторах if, вся моя программа, которая вызывает эту функцию, вылетает.Кто-нибудь знает, что может быть причиной этого?

Вот мой заголовок для функции:

<code>extern "C" __declspec(dllexport) LPCTSTR ADAuthenticate(TCHAR * username, TCHAR * password, TCHAR * server,
                                                        TCHAR * backup_server, TCHAR * domain, HWND h_wnd,
                                                        TCHAR ** attrs)

Вот как я импортирую функцию DLL:

[DllImport("WM_LDAP.dll")]
        public static extern IntPtr ADAuthenticate(string username, string password, string server, 
            string backup_server, string domain, IntPtr hWnd, string [] attrs);

1 Ответ

1 голос
/ 05 апреля 2011

Aha! Разобрался что случилось. Моя функция возвращает LPCTSTR, и в ней была переменная LPTSTR с именем ret_val, которую я использовал в качестве возвращаемой переменной. Я не инициализировал его, и когда я попытался _tcscpy () ввести значение ret_val, программа потерпела крах. Инициализация значения LPTSTR ret_val = new TCHAR [128];, кажется, работает нормально. Хотя это странно, потому что DLL работала нормально только с одним оператором if, даже без инициализации переменной ... Должен привыкнуть к тому материалу C ++ / CLI на базе Windows. Это может запутать.

Спасибо! * * 1004

...