Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2017 10:55:46

vasvladal
Зарегистрирован: 2017-11-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов метода из с++

#Тестовый модуль Sample
import socketserver
import struct
import binascii
import ctypes
import bitstruct
import bitstring
import time
import datetime
import numpy as np #модуль не загружается при попытке вызова из с++
import nvector as nv #модуль не загружается при попытке вызова из с++

#некий метод
def add(a, b):
return a+b

Использую MSVC-2017 c расширением Python.
При запуске на исполнения из студии Sample.py - все нужные библиотеки импортируются.
При попытке вызвать метод из с++ кода - библиотеки import numpy as np и import nvector as nv не загружаются. Т.е.,

PyObject *pName, *pModule;
pName =PyUnicode_DecodeFSDefault(“Sample”);
// Import the file as a Python module.
pModule = PyImport_Import(pName); //return 0

Подскажите, в какую сторону смотреть.
Спасибо

Офлайн

#2 Дек. 7, 2017 08:37:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Вызов метода из с++

vasvladal
Подскажите, в какую сторону смотреть.

1. Посмотреть загружается она из питона или нет при запуске с консольки. Что и как запускает MSVC неизвестно куда он ставит питон тоже неясно. Тут мало кто им пользовался, а и те кто попробовал сразу от него отказались. Поэтому советов как пользоваться MSVC вы тут скорее всего не найдете.
2. Потом смотреть в сторону boost python, ctypes, cffi, sip, swig и т. п. голый c api давно не встречал чтобы кто-то использовал. Если есть проблемы то учитывайте что MSVC python extension не совместим с обычным питоном (во всех известных мне двух случаях установки обычный питон ломался), можно снести extension и поставить обычный питон.
3. Встраивание питона в C++ встречается гораздо реже встраивания C++ модулей в питон. Раз так в 100. Может у вас неправильно выбрана архитектура? Какая у вас задача?



Отредактировано doza_and (Дек. 7, 2017 08:43:27)

Офлайн

#3 Дек. 7, 2017 14:50:04

vasvladal
Зарегистрирован: 2017-11-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов метода из с++

Спасибо за ответ.
Во многом уже сам разобрался и научился подключать импортируемые библиотеки.
Дело в том, что показалось просто сделать функцию на Python'е, в которую передаются широта, долгота точки А, а также дальность и азимут на точку Б. Функция расчитывает широту и долготу точки Б.

 import numpy as np
import nvector as nv
def next_coord(latitude, longitude, range, azimuth):
 frame = nv.FrameE(name='WGS84')
 pointA = frame.GeoPoint(latitude, longitude, degrees=True)
 pointB, _azimuthb = pointA.geo_point(range, azimuth, degrees=True)
 lat, lon = pointB.latitude_deg, pointB.longitude_deg
 return float(lat), float(lon)
На с++ я это делаю, но с большими телодвижениями.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version