0

我正在使用 ldap_modify 函数来使用 C++ 更改属性值...

msgid=ldap_modify_ext_s( ld, dnNameval, ldapmod,NULL,NULL );

问题是该函数中的 mod_val 参数...

LDAP *id;
dnNameval ="distinguised name";

在 ldapmod 中有三个值...

  1. mod_type="待更改属性";
  2. mod_op=LDAP_MOD_REPLACE;
  3. 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 标头了。

提前致谢。

4

1 回答 1

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};
于 2012-10-07T01:23:12.037 回答