是否可以(实时)更新动态库中变量的值?

问题描述 投票:0回答:1

我建立了一个动态共享库,其中包含一个内部包含变量的简单结构。我的主程序是C ++,该程序实时更改struct的值。

我想让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 suus_dist_takeoff;
}

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++
c++ linux shared-libraries ctypes
1个回答
0
投票

您可以创建一个创建新的dll文件的脚本,该脚本将其重命名为正确的名称,然后删除旧的dll文件。

© www.soinside.com 2019 - 2024. All rights reserved.