我有一个.DLL
,它使用其中的一些实用函数创建“命名”共享内存
我需要使用具有以下原型的函数通过python编写/读取以下Cstruct
:
int write_shmem(const char* shmem_name, char* shmem)
int read_shmem ( const char* shmem_name , char* shmem);
在.DLL
文件中
shmem_name
是共享内存名shmem
是要写入的数据Cstruct
与
typedef struct {
unsigned char c;
unsigned long l;
float f;
double d;
} DataBlock ;
我在python代码中使用了以下内容
^{pr2}$如何将类型转换为char*
?在
使用强制转换能正确地将数据放入共享内存吗?我需要从C应用程序读取相同的共享内存
编辑
使用:
int create_shmem(const char*, long long );
来自.DLL
我正在创建一个“命名的”共享内存
Python代码:
create_shmem( c_char_p(b'P0W'),
ctypes.c_longlong(sizeof(DataBlock)) )
write_shmem
和{.DLL
函数本身中完成的。(Boost
此处使用进程间共享内存对象)
使用Python版本:3.3.0
我没有您的
read_shmem
和write_shmem
函数的版本。所以我创建了以下虚拟版本:在Python代码中,我可以这样调用它们:
^{pr2}$在每种情况下(^{} ,^{} ,或^{} 用法)的输出是:
^{3}$我正在使用Linux,因此我使用以下
Makefile
从C代码创建一个共享对象库:但是在Windows上的行为应该是一样的。在
主动建议
请注意,使用}并隐含传递给它们的数据缓冲区的大小是危险的。如果不小心将另一种类型的对象传递给它们,则会得到奇怪的结果。一个更安全的选择可能是围绕这些函数创建垫片来显式地管理
write_shmem
和{DataBlock
实例。下面是一个示例,其中我有create_shmem
、write_shmem
和read_shmem
的伪实现:这样,Python代码就变得更简单、更干净、更安全:
更新:
DataBlock
传递write_block
(参见下面的eryksun注释)。在相关问题 更多 >
编程相关推荐