我正在使用 ldap_modify 函数通过 C++ 更改属性值 ...
msgid=ldap_modify_ext_s( ld, dnNameval, ldapmod,NULL,NULL );
问题是该函数中的 mod_val 参数 ...
LDAP *id;
dnNameval ="distinguised name";
在 ldapmod 中有三个值 ...
- mod_type="要更改的属性";
- mod_op=LDAP_MOD_REPLACE;
- 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 header 。
提前致谢。
最佳答案
这行不通:
mod_vals = (PWCHAR*){"bala",Null};
您不能以这种方式为 union 赋值。您必须指定要写信给 union 的哪些成员。另外,(PWCHAR *)
是错误的类型;你不是在处理宽字符。即使您是,也不能仅通过强制转换来转换字符串。
这也行不通:
mod_vals.modv_strvals=(PWCHAR*) Password1;
mod_vals.modv_bvals=NULL;
modv_strvals
成员是一个指向指针的指针,而不仅仅是一个指针,写入一个 union 的两个成员是没有意义的;他们是互斥的。根据上下文,您可以使用 modv_strvals
或 modv_bvals
,不能同时使用。
你可能想这样做:
mod_vals.modv_strvals = {"bala", Null};
关于c++ - 如何使用 C++ 在 Active Directory 的属性中设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757085/