Объединить python(gui) и C++

146
22 апреля 2022, 17:20

У меня есть программа которая работает с файлами, все готово кроме интерфейса, я бы его спокойно могла бы доделать на C++, но сроки поджимают. Можно ли сделать на Python интерфейс, а на C++ функции? Ну как-нибудь из Python вызывать их?

Answer 1

Предположим, у вас есть простой пример класса C ++, который вы хотите вызвать из питона, в файле с именем foo.cpp:

#include <iostream>
class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};

Поскольку ctypes могут взаимодействовать только с функциями C, вам необходимо предоставить те, которые объявляют их как extern "C":

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

Теперь компилируем это в библиотеку:

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

И, наконец, вам нужно написать свою оболочку(например, в fooWrapper.py):

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()
    def bar(self):
        lib.Foo_bar(self.obj)

Теперь все работает ;)

f = Foo()
f.bar() # and you will see "Hello" on the screen

source

READ ALSO
Как найти сумму ряда? [дубликат]

Как найти сумму ряда? [дубликат]

Дано натуральное число x и количество рядов равное 5 как вывести сумму ряда?

125
clang парсинг комментариев

clang парсинг комментариев

Начал изучения библиотеки clang для парсинга кодаМне необходимо найти все комментарии

275
Скачать превью с im0-tub-ru.yandex.net

Скачать превью с im0-tub-ru.yandex.net

Каким образом в QT можно получить превью картинки с яндекскартинок

200