我在使用一些 wldap32.lib 函数时遇到了一些问题。 代码
#include "winldap.h"
LDAP Connect;
Connect = *(ldap_init(...));
1) 合法吗?看来是这样,因为我的结构与我使用此代码得到的结构相同
LDAP *pConnect;
Connect = ldap_init(...);
2)下一步
ldap_set_option(&Connect, LDAP_OPT_PROTOCOL_VERSION, (void*)&version));
返回 89 代码。
但是使用
ldap_set_option(pConnect, LDAP_OPT_PROTOCOL_VERSION, (void*)&version));
成功
最佳答案
对于 (1),它是有效的 C,只是不适用于 API。
LDAP
winldap.h
中暴露的结构只是 LDAP
的用户可观察元素结构。该库完全有权返回一个指向比向用户公开的结构大得多的结构的指针。因此,当您执行结构体赋值时,只有您知道的元素才会被复制,而其余的内存将会丢失。
因此,当您尝试使用这个现已被截断的结构副本时,您会得到 89
错误代码。
此外,您无法知道 ldap_init
是否函数失败 - 当失败时它返回 NULL
指针,在这种情况下你的程序就会死掉
关于c - ldap_init 和 ldap_set_option 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507723/