我使用ldap_modify函数使用C ++ ...
更改属性值msgid=ldap_modify_ext_s( ld, dnNameval, ldapmod,NULL,NULL );
问题是该函数中的mod_val参数......
LDAP *id;
dnNameval ="distinguised name";
在ldapmod中有三个值......
ldapmod结构是:
typedef struct ldapmod {
int mod_op;
char *mod_type;
union {
char **modv_strvals;
struct berval **modv_bvals;
} mod_vals;
#define mod_values mod_vals.modv_strvals
#define mod_bvalues mod_vals.modv_bvals
} LDAPMod;
我尝试传递这样的值:
mod_vals=(PWCHAR*){"bala",Null};
导致错误
error C2679: binary '=' : no operator found which takes a right-hand operand
of type 'PWCHAR *' (or there is no acceptable conversion)
我也试过这个:
mod_vals.modv_strvals=(PWCHAR*) Password1;
mod_vals.modv_bvals=NULL;
但是数组的值为空值...
任何人都可以帮我解决如何传递该变量中的值吗?我是否需要包含任何其他头文件?我已经在使用winldap.h标题了。
提前致谢。
答案 0 :(得分:1)
这不起作用:
mod_vals = (PWCHAR*){"bala",Null};
您不能以这种方式为联合分配值。您必须指定要写入的联合成员。此外,(PWCHAR *)
是错误的类型;你不是在处理广角人物。即使你是,你也不能通过强制转换它来转换字符串。
这也不起作用:
mod_vals.modv_strvals=(PWCHAR*) Password1;
mod_vals.modv_bvals=NULL;
modv_strvals
成员是指向指针的指针,而不仅仅是指针,写入联合的两个成员是没有意义的。他们互相排斥。根据具体情况,您可以使用modv_strvals
或modv_bvals
,而不是两者都使用。
你可能想这样做:
mod_vals.modv_strvals = {"bala", Null};