У меня есть динамическая 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++