Python中文
首页
教程
问答
标签
搜索
登录
注册
如何使用Python cType初始化C++头文件中的结构变量?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我试图使用Python ctypes初始化.h头文件中的<code>ExternalInputs_add_two</code>结构。头文件是:</p> <pre><code>typedef struct { int32_T Input; /* '<Root>/Input' */ int32_T Input1; /* '<Root>/Input1' */ } ExternalInputs_add_two; </code></pre> <p>我需要初始化此结构,因为此成员声明使用结构值作为输入:</p> ^{pr2}$ <p>什么ctypes函数初始化结构?到目前为止,我的Python代码是:</p> <pre><code>class ModelOutput(Structure): _fields_ = [("Output", c_int)] class ModelInput(Structure): _fields_ = [("Input", c_int), ("Input1", c_int)] #define the functions initiateModel = cdll.add_two_win32.add_two_initialize stepModel = cdll.add_two_win32.add_two_step terminateModel = cdll.add_two_win32.add_two_terminate #define the pointers to the functions initiateModel.restype = c_void_p stepModel.restype = c_void_p terminateModel.restype = c_void_p #initialize the model with value of 1 print "\n\nInitialize" errMsg = initiateModel(1) print "initateModel reports:", errMsg #Set the input test_input = ModelInput(1,2) input_ptr = pointer(test_input) #This probably doesn't work since ExternalInputs_add_two is a structure, not a function. cdll.add_two_win32.ExternalInputs_add_two = input_ptr #Get the output pointer from add_two_U output = POINTER(ModelOutput) results = output.in_dll(cdll.add_two_win32,"add_two_U") print "got results", results.Output </code></pre> <p>我昨天问了一个问题:如何从成员<code>add_two_U</code>获取输出。David昨天很好地回答了这个问题(使用<code>in_dll</code>函数)。在</p> <p>我已经在ctypes文档和在线文档中搜索了一个使用ctype设置结构的示例或函数。到目前为止我还没有找到。在</p> <p>谢谢你的帮助。在</p> <p>谢谢你的帮助和回答。不幸的是,以这种方式设置输入结构是行不通的。我忘了提到一个Matlab脚本是用来使用dll的,它可以工作。我正在尝试转换成Python。为了初始化ExternalInputs_add_two结构,Matlab使用以下语句:</p> <pre><code>sm.Input = 1 sm.Input1 = 2 sp = libpointer('ExternalInputs_add_two', sm) </code></pre> <p>然后函数add_two_被调用:</p> <pre><code>sp = calllib('add_two_win32', 'add_two_U') sp.value get(sp, 'Value') sp.Value.Input = 3 sp.Value.Input1 = 2 </code></pre> <p>如果我删除初始化ExternalInputs_add_two结构的Matlab语句,就会得到一个错误。在</p> <p>初始化结构的Python ctypes等价于什么?如果我看起来像个害虫,我很抱歉。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我给你的建议是停止从DLL导出变量。相反,您应该从DLL中导出两个函数:一个用于读取变量,另一个用于写入变量。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
文本导入时标题行中的特殊字符
7 回答
文本小部件:在没有输入时更新并在循环后保持空闲
4 回答
文本小部件tkin
10 回答
文本小部件tkinter中的标签更改或文本外观更改是否有撤消功能?
9 回答
文本小部件tkinter复制图像选项
9 回答
文本小部件上的Python Tkinter ttk滚动条未缩放
5 回答
文本小部件上的滚动条可能需要根据制表符ord显示前进行滚动
2 回答
文本小部件不显示lis中的内容
1 回答
文本小部件不显示Unicode字符
6 回答
文本小部件中写入的行间距
4 回答
文本小部件中的文本作为变量
7 回答
文本小部件中的滚动条仅显示在底部
3 回答
文本小部件中的选项卡键空间计数
1 回答
文本小部件作为Lis
5 回答
文本小部件在主框架中扩展列宽
1 回答
文本小部件未使用删除功能清除
9 回答
文本小部件滚动动画(Tkinter、Python)
6 回答
文本居中。格式正确吗?
1 回答
文本差分算法
3 回答
文本已知时音频文件中的单词索引
10 回答