C ++ DLL中的_tcscmp错误

时间:2011-04-04 22:16:26

标签: c# windows-mobile dllimport

我正在编写一个名为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);

2 个答案:

答案 0 :(得分:1)

啊哈!弄清楚发生了什么。我的函数返回一个LPCTSTR,在其中我有一个名为ret_val的LPTSTR变量,我用它作为返回变量。我没有初始化它,当我尝试_tcscpy()一个值到ret_val程序崩溃。将值初始化为LPTSTR ret_val = new TCHAR [128];似乎正常。这很奇怪,因为即使没有初始化变量,DLL只能使用一个if语句工作正常......要习惯那种基于Windows的C ++ / CLI的东西。它可能会让人感到困惑。

谢谢!

答案 1 :(得分:0)

包括“ tchar.h”库:

#include <tchar.h>