调用 returns 列表的 C++ 函数
Calling a C++ Function that returns list
我有这个函数是C++:
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib, "iphlpapi.lib")
void printInterfaces(){
ULONG buflen = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
}
if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
for (IP_ADAPTER_INFO *pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next) {
if (pAdapter -> IpAddressList.IpAddress.String != "0.0.0.0"){
std::cout << "IP: " <<
pAdapter->IpAddressList.IpAddress.String <<
" Description: " <<
pAdapter-> Description << std::endl;
}
}
}
if (pAdapterInfo) free(pAdapterInfo);
}
我正在用 python 写一个嗅探器,我想获取 windows 上的接口名称,所以这个 c++ 代码打印 IP 地址和描述,有没有办法调用这个函数来自 python 并使其成为 return 接口作为一个包含元组的列表?而且我在执行 != "0.0.0.0"
时遇到问题,它运行但不过滤 ip“0.0.0.0”的接口。正确的方法是什么?另外我对C#比较熟悉,导入C#是不是比C++更容易?
引自Python.Boost:
The Boost Python Library is a framework for interfacing Python and
C++. It allows you to quickly and seamlessly expose C++ classes
functions and objects to Python, and vice-versa, using no special
tools -- just your C++ compiler. It is designed to wrap C++ interfaces
non-intrusively, so that you should not have to change the C++ code at
all in order to wrap it, making Boost.Python ideal for exposing
3rd-party libraries to Python. The library's use of advanced
metaprogramming techniques simplifies its syntax for users, so that
wrapping code takes on the look of a kind of declarative interface
definition language (IDL).
您可以看到另一个用示例 here 描述的很好的解决方案。
通常 python 包装器,如 swig:http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf 或 Python.Boost 实际上包装函数。
所以类型为 void 的 c++ 函数永远不会 return 列表。
它打印到标准输出,因此您需要捕获它并解析它以生成一个 python 列表..
您可能希望 return 该 c++ 函数中的某些内容实际上可以由 python 包装器解释为列表。
尝试 returning a std::vector 并阅读:https://wiki.python.org/moin/boost.python/StlContainers
我有这个函数是C++:
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib, "iphlpapi.lib")
void printInterfaces(){
ULONG buflen = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
}
if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
for (IP_ADAPTER_INFO *pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next) {
if (pAdapter -> IpAddressList.IpAddress.String != "0.0.0.0"){
std::cout << "IP: " <<
pAdapter->IpAddressList.IpAddress.String <<
" Description: " <<
pAdapter-> Description << std::endl;
}
}
}
if (pAdapterInfo) free(pAdapterInfo);
}
我正在用 python 写一个嗅探器,我想获取 windows 上的接口名称,所以这个 c++ 代码打印 IP 地址和描述,有没有办法调用这个函数来自 python 并使其成为 return 接口作为一个包含元组的列表?而且我在执行 != "0.0.0.0"
时遇到问题,它运行但不过滤 ip“0.0.0.0”的接口。正确的方法是什么?另外我对C#比较熟悉,导入C#是不是比C++更容易?
引自Python.Boost:
The Boost Python Library is a framework for interfacing Python and C++. It allows you to quickly and seamlessly expose C++ classes functions and objects to Python, and vice-versa, using no special tools -- just your C++ compiler. It is designed to wrap C++ interfaces non-intrusively, so that you should not have to change the C++ code at all in order to wrap it, making Boost.Python ideal for exposing 3rd-party libraries to Python. The library's use of advanced metaprogramming techniques simplifies its syntax for users, so that wrapping code takes on the look of a kind of declarative interface definition language (IDL).
您可以看到另一个用示例 here 描述的很好的解决方案。
通常 python 包装器,如 swig:http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf 或 Python.Boost 实际上包装函数。
所以类型为 void 的 c++ 函数永远不会 return 列表。 它打印到标准输出,因此您需要捕获它并解析它以生成一个 python 列表..
您可能希望 return 该 c++ 函数中的某些内容实际上可以由 python 包装器解释为列表。
尝试 returning a std::vector 并阅读:https://wiki.python.org/moin/boost.python/StlContainers