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”]); //…做点什么。。。 }
现在我想得到一个新的ldap对象,我可以这样做吗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
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这对你的问题有帮助吗?