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列表和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=

在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=(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中应该有什么来表示我将要传入

  • 包含字符串的数组
  • 包含浮点数的数组
  • 我正在windows上使用python 2.7.10 关于

    这里有一个简单的C测试(每个高度加100.0):

    输出:

    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]