如何使用C ++在Active Directory的属性中设置值?

时间:2012-10-06 05:40:48

标签: c++ c windows ldap

我使用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 struct
  4. 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标题了。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

这不起作用:

 mod_vals = (PWCHAR*){"bala",Null};

您不能以这种方式为联合分配值。您必须指定要写入的联合成员。此外,(PWCHAR *)是错误的类型;你不是在处理广角人物。即使你是,你也不能通过强制转换它来转换字符串。

这也不起作用:

mod_vals.modv_strvals=(PWCHAR*) Password1; 
mod_vals.modv_bvals=NULL;

modv_strvals成员是指向指针的指针,而不仅仅是指针,写入联合的两个成员是没有意义的。他们互相排斥。根据具体情况,您可以使用modv_strvalsmodv_bvals,而不是两者都使用。

你可能想这样做:

mod_vals.modv_strvals = {"bala", Null};