Найти - Пользователи
Полная версия: Вызов метода из с++
Начало » Python для экспертов » Вызов метода из с++
1
vasvladal
#Тестовый модуль 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

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

1. Посмотреть загружается она из питона или нет при запуске с консольки. Что и как запускает MSVC неизвестно куда он ставит питон тоже неясно. Тут мало кто им пользовался, а и те кто попробовал сразу от него отказались. Поэтому советов как пользоваться MSVC вы тут скорее всего не найдете.
2. Потом смотреть в сторону boost python, ctypes, cffi, sip, swig и т. п. голый c api давно не встречал чтобы кто-то использовал. Если есть проблемы то учитывайте что MSVC python extension не совместим с обычным питоном (во всех известных мне двух случаях установки обычный питон ломался), можно снести extension и поставить обычный питон.
3. Встраивание питона в C++ встречается гораздо реже встраивания C++ модулей в питон. Раз так в 100. Может у вас неправильно выбрана архитектура? Какая у вас задача?
vasvladal
Спасибо за ответ.
Во многом уже сам разобрался и научился подключать импортируемые библиотеки.
Дело в том, что показалось просто сделать функцию на 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)
На с++ я это делаю, но с большими телодвижениями.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB