boost python的资源句柄
Resource handle of boost python
使用boost::python从c++调用python代码。
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,ldifn"
"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...
}
现在我想获得一个新的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,ldifn"
"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"]);
如果这是不安全的,我该怎么办?如果这是安全的,我还有别的选择吗?
环境:Boost版本:1_55_0编译器:vc2008操作系统:win7 64bits
现在我想获得一个新的ldap对象,我可以这样做吗?
是的,你可以。ldap模块是OpenLDAP C API的包装器,因此,如果python模块的文档本身不够清楚,您可以随时查阅原始文档[1,2]。在这里,您将发现从open
/init
/initialize
方法调用返回的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 ldapn"
"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;
}
相关文章:
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 如何获取边缘窗口句柄 (HWND)?
- 枚举进程模块在有效句柄上返回无效句柄
- 在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效是什么?
- 从运行服务的应用程序代码中提取窗口句柄
- 在读取文件后重置句柄
- 是否有像地图这样的C++结构,但我得到的不是值的键,而是值的句柄?
- Microsoft ODBC 无法创建有效的句柄
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- 获取特定进程的句柄数
- C++ 创建 NdisProt 驱动程序的句柄
- 是否需要关闭来自 WinHTTP 异步的句柄?
- 句柄OK全部崩溃
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 什么是 C# 等同于C++句柄
- 带有资源句柄的TensorFlow自定义C++操作
- 资源句柄-禁止默认构造函数
- 检索 Windows 资源管理器的地址栏编辑控件的句柄
- boost python的资源句柄
- 自动释放资源的通用句柄