[C ++ dll中的_tcscmp错误

问题描述 投票:1回答:2

我正在编写一个名为ADAuthenticate的DLL函数,该函数将根据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语句中,调用此函数的整个程序就会崩溃。有人知道这可能是什么原因吗?

以下是我的函数标题:

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);
c# windows-mobile dllimport
2个回答
1
投票

啊哈!弄清楚发生了什么。我的函数返回一个LPCTSTR,并且在其中有一个我称为返回变量的LPTSTR变量ret_val。我没有初始化它,当我尝试_tcscpy()一个值到ret_val时程序崩溃了。将值初始化为LPTSTR ret_val = new TCHAR [128];似乎可以正常进行。不过这很奇怪,因为即使不初始化变量,DLL也只能使用一个if语句来正常工作...必须习惯于基于Windows的C ++ / CLI东西。可能会造成混淆。

谢谢!


0
投票

包括“ tchar.h”库:

#include <tchar.h>
© www.soinside.com 2019 - 2024. All rights reserved.