调用返回列表的C ++函数

时间:2015-05-21 12:06:21

标签: python c++ network-interface

我的这个功能是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中调用这个函数并让它返回接口作为带元组的列表?而且我在运行!= "0.0.0.0"时遇到问题,但是没有使用ip“0.0.0.0”过滤接口。这样做的正确方法是什么?另外我对C#比较熟悉,导入C#比C ++更容易吗?

2 个答案:

答案 0 :(得分:1)

引自Python.Boost

  

Boost Python Library是一个用于连接Python和Python的框架   C ++。它允许您快速无缝地公开C ++类   Python的函数和对象,反之亦然,没有特殊之处   工具 - 只是你的C ++编译器。它旨在包装C ++接口   非侵入式,因此您不必更改C ++代码   所有这些都是为了包装它,使Boost.Python成为暴露的理想选择   第三方库到Python。图书馆使用先进的   元编程技术简化了用户的语法,因此   包装代码具有一种声明性接口的外观   定义语言(IDL)。

您可以看到使用示例here描述的另一个优秀且出色的解决方案。

答案 1 :(得分:1)

通常是python包装器,比如swig:http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf或者Python.Boost实际上包装了这些函数。

所以类型为void的c ++函数永远不会返回列表。 它打印到standardout,所以你需要捕获它并解析它以生成一个python列表..

您可能希望在c ++函数中返回一些实际上可以由python包装器解释为列表的内容。

尝试返回std :: vector并阅读:https://wiki.python.org/moin/boost.python/StlContainers