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

标签 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 结构

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_strvalsmodv_bvals,不能同时使用。

你可能想这样做:

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

关于c++ - 如何使用 C++ 在 Active Directory 的属性中设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757085/

相关文章:

c++ - 如何组织带有符号分析的无限循环?

c - Linux环境下malloc杀死子进程

c - 指向 char 数组的指针数组

c++ - 未显示 MFC CMenu 工具提示

c# - 连接到远程共享文件夹导致 "multiple connections not allowed"错误,但尝试断开连接导致 "connection does not exist"

c++ - 如何在没有外部库的情况下在 C++(11) 中创建强类型定义?

c++ - 这可能吗?(C++)

c++ - 从应仅包含数字的 .csv 文件中删除字符

C:定义一个long数组作为函数的返回类型

c# - 如何捕获另一个进程的未处理异常?