0

ldap_modify関数を使用して、C++を使用して属性値を変更しています...

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

問題は、その関数のmod_val引数です...

LDAP *id;
dnNameval ="distinguised name";

ldapmodには3つの値があります...

  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;

しかし、その場合、配列の値は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単なるポインターではなく、ポインターからポインターであり、共用体の2つのメンバーに書き込むことは意味がありません。それらは相互に排他的です。使用するコンテキストに応じて、modv_strvalsまたはmodv_bvals、両方ではありません。

あなたはおそらくこれをしたいでしょう:

mod_vals.modv_strvals = {"bala", Null};
于 2012-10-07T01:23:12.037 に答える