Python列表和ctypes 外”“C”< /代码>,则可以作为函数名导出。mnt仅仅是char上的typedef吗?我可以调用该函数,事实上它不会崩溃,但当我查看新的山脉高度时,它们保持不变。我仔细阅读了代码,成功时返回1,失败时返回0(我快速阅读了一些文档),它总是返回0。我想我没有正确的argtype。但我不知道如何将数组声明为argtypes的一部分。函数如何知道两个数组中有多少元素(因为它们不是大小参数)?这是否意味着moutains数组中的最后一个元素为NULL?抱歉,我不认为大小参数很重要,更新了问题。您可以定义“它似乎不起作用”吗?你至少能调用这个函数吗?由于函数是C++函数,如果未声明为“代码>外”“C”< /代码>,则可以作为函数名导出。mnt仅仅是char上的typedef吗?我可以调用该函数,事实上它不会崩溃,但当我查看新的山脉高度时,它们保持不变。我仔细阅读了代码,成功时返回1,失败时返回0(我快速阅读了一些文档),它总是返回0。我想我没有正确的argtype。但我不知道如何将数组声明为argtypes的一部分。函数如何知道两个数组中有多少元素(因为它们不是大小参数)?这是否意味着mountains数组中的最后一个元素为NULL?抱歉,我认为size参数不重要,更新了问题 Before: [100.0, 200.0, 300.0] result: 1 After: [200.0, 300.0, 400.0]
在python中,我有两个列表Python列表和ctypes 外”“C”< /代码>,则可以作为函数名导出。mnt仅仅是char上的typedef吗?我可以调用该函数,事实上它不会崩溃,但当我查看新的山脉高度时,它们保持不变。我仔细阅读了代码,成功时返回1,失败时返回0(我快速阅读了一些文档),它总是返回0。我想我没有正确的argtype。但我不知道如何将数组声明为argtypes的一部分。函数如何知道两个数组中有多少元素(因为它们不是大小参数)?这是否意味着moutains数组中的最后一个元素为NULL?抱歉,我不认为大小参数很重要,更新了问题。您可以定义“它似乎不起作用”吗?你至少能调用这个函数吗?由于函数是C++函数,如果未声明为“代码>外”“C”< /代码>,则可以作为函数名导出。mnt仅仅是char上的typedef吗?我可以调用该函数,事实上它不会崩溃,但当我查看新的山脉高度时,它们保持不变。我仔细阅读了代码,成功时返回1,失败时返回0(我快速阅读了一些文档),它总是返回0。我想我没有正确的argtype。但我不知道如何将数组声明为argtypes的一部分。函数如何知道两个数组中有多少元素(因为它们不是大小参数)?这是否意味着mountains数组中的最后一个元素为NULL?抱歉,我认为size参数不重要,更新了问题 Before: [100.0, 200.0, 300.0] result: 1 After: [200.0, 300.0, 400.0],c++,python-2.7,ctypes,C++,Python 2.7,Ctypes,在python中,我有两个列表 山脉=[乞力马扎罗山、塞纳山、埃尔贡山] mnt_高度=[100.12003331.56] 元素计数=len(山脉) 我使用ctypes并调用c函数,如下所示 def change_heights(mountain_list,height_list,element_count): mountain_array=(ctypes.c_char_p * len(mountain_list))(*mountain_list) height_array=
- 山脉=[乞力马扎罗山、塞纳山、埃尔贡山]
- mnt_高度=[100.12003331.56]
- 元素计数=len(山脉)
def change_heights(mountain_list,height_list,element_count):
mountain_array=(ctypes.c_char_p * len(mountain_list))(*mountain_list)
height_array=(ctypes.c_float * len(height_list))(*height_list)
element_count_param=ctypes.c_int8(element_count)
change_mountain_heights.argtypes=(ctypes.c_char_p,ctypes.c_float,ctypes.c_int8)
_success=change_mountain_heights(mountain_array,height_array,element_count_param)
但它似乎不起作用,我不能100%确定是否创建了正确的数组,如大小和中的数组,以确保正确地将山字符串指定给数组,高度也是如此。我是做错了什么,还是应该从别处寻找问题的根源
更新
我认为其中一个问题源于
change_mountain_heights.argtypes=(ctypes.c_char_p,ctypes.c_float,ctypes.c_int8)
现在山脉列表是一个字符串数组,或者在python中是一个字符串列表,如何将argtypes设置为一个字符串列表或至少是一个字符串数组
我在argtypes中使用的ctypes.c\u char\p不允许我将字符串数组传递到函数中,这一假设是否正确?。argtypes中应该有什么来表示我将要传入
Before: [100.0, 200.0, 300.0]
result: 1
After: [200.0, 300.0, 400.0]
下面是一个简单的C测试(每个高度加100.0):
输出:
Before: [100.0, 200.0, 300.0]
result: 1
After: [200.0, 300.0, 400.0]
你能给“它似乎不起作用”下个定义吗?你至少能调用这个函数吗?由于函数是C++函数,如果未声明为“代码>外”“C”< /代码>,则可以作为函数名导出。
mnt
仅仅是char
上的typedef
吗?我可以调用该函数,事实上它不会崩溃,但当我查看新的山脉高度时,它们保持不变。我仔细阅读了代码,成功时返回1,失败时返回0(我快速阅读了一些文档),它总是返回0。我想我没有正确的argtype。但我不知道如何将数组声明为argtypes的一部分。函数如何知道两个数组中有多少元素(因为它们不是大小参数)?这是否意味着moutains
数组中的最后一个元素为NULL
?抱歉,我不认为大小参数很重要,更新了问题。您可以定义“它似乎不起作用”吗?你至少能调用这个函数吗?由于函数是C++函数,如果未声明为“代码>外”“C”< /代码>,则可以作为函数名导出。mnt
仅仅是char
上的typedef
吗?我可以调用该函数,事实上它不会崩溃,但当我查看新的山脉高度时,它们保持不变。我仔细阅读了代码,成功时返回1,失败时返回0(我快速阅读了一些文档),它总是返回0。我想我没有正确的argtype。但我不知道如何将数组声明为argtypes的一部分。函数如何知道两个数组中有多少元素(因为它们不是大小参数)?这是否意味着mountains
数组中的最后一个元素为NULL
?抱歉,我认为size参数不重要,更新了问题
Before: [100.0, 200.0, 300.0]
result: 1
After: [200.0, 300.0, 400.0]