boostpython的资源句柄 使用Boosi::Python从C++调用Python代码.< /P> int main() { namespace bp = boost::python; Py_Initialize(); bp::object main_module = bp::import("__main__"); bp::import("ldap"); bp::import("ldif"); bp::object main_namespace = main_module.attr("__dict__"); bp::exec("import ldap,ldif\n" "l = ldap.initialize('ldaps://RIO-PC')\n", main_namespace); //get the ldap object from the main_namespace boost::python::object ldap = boost::python::extract<boost::python::object>(main_namespace["l"]); //...do something... } intmain() { 名称空间bp=boost::python; Py_初始化(); bp::object main_module=bp::import(“_main__;”); 导入(“ldap”); bp::进口(“ldif”); object main_namespace=main_module.attr(“uu dict_u”); bp::exec(“导入ldap,ldif\n” “l=ldap.initialize('ldaps://RIO-PC“)\n”, 主名称空间); //从主名称空间获取ldap对象 boost::python::objectldap=boost::python::extract(main_名称空间[“l”]); //…做点什么。。。 }

boostpython的资源句柄 使用Boosi::Python从C++调用Python代码.< /P> int main() { namespace bp = boost::python; Py_Initialize(); bp::object main_module = bp::import("__main__"); bp::import("ldap"); bp::import("ldif"); bp::object main_namespace = main_module.attr("__dict__"); bp::exec("import ldap,ldif\n" "l = ldap.initialize('ldaps://RIO-PC')\n", main_namespace); //get the ldap object from the main_namespace boost::python::object ldap = boost::python::extract<boost::python::object>(main_namespace["l"]); //...do something... } intmain() { 名称空间bp=boost::python; Py_初始化(); bp::object main_module=bp::import(“_main__;”); 导入(“ldap”); bp::进口(“ldif”); object main_namespace=main_module.attr(“uu dict_u”); bp::exec(“导入ldap,ldif\n” “l=ldap.initialize('ldaps://RIO-PC“)\n”, 主名称空间); //从主名称空间获取ldap对象 boost::python::objectldap=boost::python::extract(main_名称空间[“l”]); //…做点什么。。。 },python,c++,boost,Python,C++,Boost,现在我想得到一个新的ldap对象,我可以这样做吗 bp::object main_module_2 = bp::import("__main__"); bp::import("ldap"); bp::import("ldif"); bp::object main_namespace_2 = main_module_2.attr("__dict__"); bp::exec("import ldap,ldif\n" "l = ldap.initialize('ldaps://RI

现在我想得到一个新的ldap对象,我可以这样做吗

bp::object main_module_2 = bp::import("__main__");
bp::import("ldap");
bp::import("ldif");
bp::object main_namespace_2 = main_module_2.attr("__dict__");

bp::exec("import ldap,ldif\n"
         "l = ldap.initialize('ldaps://RIO-PC')\n",
         main_namespace);

//get the ldap object from the main_namespace
boost::python::object ldap_2 = boost::python::extract<boost::python::object>(main_namespace_2["l"]);
bp::object main\u module\u 2=bp::import(“\uuuu main\uuu”);
导入(“ldap”);
bp::进口(“ldif”);
object main_namespace_2=main_module_2.attr(“u dict_u”);
bp::exec(“导入ldap,ldif\n”
“l=ldap.initialize('ldaps://RIO-PC“)\n”,
主名称空间);
//从主名称空间获取ldap对象
boost::python::objectldap_2=boost::python::extract(main_namespace_2[“l”]);
如果这是不安全的,我该怎么办?如果这是安全的,我还有其他选择吗

环境: 升级版本:1_55_0 编译程序:vc2008 操作系统:win7 64位

现在我想得到一个新的ldap对象,我可以这样做吗

bp::object main_module_2 = bp::import("__main__");
bp::import("ldap");
bp::import("ldif");
bp::object main_namespace_2 = main_module_2.attr("__dict__");

bp::exec("import ldap,ldif\n"
         "l = ldap.initialize('ldaps://RIO-PC')\n",
         main_namespace);

//get the ldap object from the main_namespace
boost::python::object ldap_2 = boost::python::extract<boost::python::object>(main_namespace_2["l"]);
是的,你可以。该模块是OpenLDAP C API的包装器,因此,如果python模块的文档本身不够清晰,您可以随时查阅原始文档[,]。在那里,您会发现从
打开
/
初始化
/
方法调用返回的LDAP结构是每个连接描述符


为了进一步增加您的信心,您可以验证在特定平台上该对象是否未被重用。您可以通过检查返回的python对象标识符(
id(obj)
)是否不同来执行此操作:

#include <boost/python.hpp>
#include <iostream>

int main() {
    namespace bp = boost::python;    
    Py_Initialize();

    bp::object main_module = bp::import("__main__");
    bp::import("ldap");
    bp::object main_namespace = main_module.attr("__dict__");
    bp::exec(
         "import ldap\n"
         "a = ldap.initialize('ldaps://tls.example.com')\n"
         "b = ldap.initialize('ldaps://tls.example.com')\n",
         main_namespace);

    boost::python::object a = boost::python::extract<
        boost::python::object>(main_namespace["a"]);
    boost::python::object b = boost::python::extract<
        boost::python::object>(main_namespace["b"]);
    std::cout << "id(a) = " << reinterpret_cast<long>(a.ptr()) << std::endl;
    std::cout << "id(b) = " << reinterpret_cast<long>(b.ptr()) << std::endl;
}
#包括
#包括
int main(){
名称空间bp=boost::python;
Py_初始化();
bp::object main_module=bp::import(“_main__;”);
导入(“ldap”);
object main_namespace=main_module.attr(“uu dict_u”);
执行(
“导入ldap\n”
“a=ldap.initialize('ldaps://tls.example.com“)\n”
“b=ldap.initialize('ldaps://tls.example.com“)\n”,
主名称空间);
boost::python::object a=boost::python::extract<
boost::python::object>(主命名空间[“a”]);
boost::python::object b=boost::python::extract<
boost::python::object>(main_名称空间[“b]”);

std::cout@user3518786这对你的问题有帮助吗?