Есть ли способ обновить значение переменной внутри библиотеки Dynami c (в режиме реального времени)? - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть динамическая c общая библиотека, которая содержит простую структуру с переменными внутри нее. Моя основная программа на C ++, и эта программа изменяет значения структуры в режиме реального времени.

Я хочу, чтобы скрипт python использовал обновленные значения в режиме реального времени.

Однако текущий скрипт python (использующий ctypes) не получает обновленные значения.

Есть ли способ сделать это? Возможно ли это сделать?

Текущий python выглядит следующим образом ( script.py ):

#!/usr/bin/env python3
import sys
import ctypes

# pulls library made from c++
lib = ctypes.cdll.LoadLibrary('./libsharedObject.so')

# init constructor
lib.object_new.argtypes = []
lib.object_new.restype = ctypes.c_void_p


# init do_something function
lib.object_do_something.argtypes = [ctypes.c_void_p]
lib.object_do_something.restype = ctypes.c_float

class Object:
    def __init__(self):
        self.obj = lib.object_new()
        print("`Object` instance (as a `void *`): 0x{:016X}".format(self.obj))

    def do_something(self):
        return lib.object_do_something(self.obj)


def main():
    print("Testing Library...")
    obj = Object()
    ret = obj.do_something()
    print(ret)

if __name__ == "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main()

файл общей библиотеки ( sharedObject. h ):

// Data Structure for Raspberry Pi 
struct UAVTlm_t { 
    float       distance;      // distance
    UAVTlm_t(){
        distance = 7.12;
    }

    float do_something();

};

sharedObject. cpp

#include "sharedObject.h"    
struct UAVTlm_t;

float UAVTlm_t::do_something() {
    return distance;
}

extern "C" {
    UAVTlm_t *object_new(){
        return new UAVTlm_t;
    }

    float object_do_something(UAVTlm_t *pObj) { 
        return pObj->do_something(); 
    }
}

Библиотека построена со следующей строкой:

$ g++ -shared -fPIC -o libsharedObject.so sharedObject.cpp -lstdc++
...