Вызов функции C ++, которая возвращает список

У меня есть эта функция 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 ++?

1

Решение

как правило, оболочки Python, как Swig: http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf или Python.Boost фактически оборачивает функции.

поэтому функция c ++ с типом void никогда не вернет список.
он печатает в standardout, поэтому вам нужно захватить его и проанализировать, чтобы сгенерировать список python.

Возможно, вы захотите вернуть что-то в этой функции c ++, которая на самом деле может быть интерпретирована оболочкой Python в список.

попробуйте вернуть std :: vector и прочитайте это: https://wiki.python.org/moin/boost.python/StlContainers

1

Другие решения

Цитируется из Python.Boost:

Boost Python Library является основой для взаимодействия Python и
C ++. Это позволяет вам быстро и без проблем выставлять классы C ++
функции и объекты в Python, и наоборот, не используя специальные
инструменты — просто ваш компилятор C ++. Он предназначен для упаковки интерфейсов C ++
не навязчиво, так что вам не придется менять код C ++ в
все для того, чтобы обернуть его, что делает Boost.Python идеальным для разоблачения
Сторонние библиотеки на Python. Библиотека использует передовые
Метапрограммирование упрощает его синтаксис для пользователей, так что
код переноса выглядит как декларативный интерфейс
язык определения (IDL).

Вы можете увидеть другое хорошее и отличное решение, изображенное на примере Вот.

1

По вопросам рекламы [email protected]