我在文件中有一个大数组,我无法修改但需要在C ++中访问。我需要迭代数组并将值返回给python脚本。
问题:我能够通过它的名字找到数组中的元素。当我尝试将它的值和section元素返回给python包装器时,无论它们的实际值是什么,它们都返回0或-1。以下是来自external_lists.h的数组中第一个元素的示例:
if($query->rowCount() > 0) {
foreach($results as $result) {
// Output the successful results
}
} else {
echo "Car not found!";
}
这个数组有数千个相似的元素。当我运行以下代码时,我得到info_struct A1[] = {
{ "LIMITING", {{0x00, 0x02, 0xFF}}
.........
}
或0x
。 Valuedll.cpp:
-0x1
类型#include <iostream>
#include <string>
#include <array>
#include "external_lists.h"
extern info_struct A1[];
extern info_struct A2[];
extern int A1size;
extern int A2size;
#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT int get_creation_data(const char* needed_name){
int A1_size = ( A1size/ sizeof(A1[0])) ;
int A2_size = ( A2size / sizeof(A2[0])) ;
for (int i = 0; i < A1_size; i++) {
if (A1[i].name == needed_name) {
return A1[i].style->value;
}
}
return -1;
}
由以下结构构成:
info_struct
我需要获取样式数组中的值。 style_length结构如下:
struct info_struct{
const char* name;
style_length style[MAX_SIZE];
options_length options[MAX_SIZE];
}
我的python包装器如下:
struct style_length{
uint16_t value, section;
option_bits obits;
}
输出:
import os, sys, re
from ctypes import *
import ctypes as ct
def get_creation_values(value_name):
valuell = CDLL('C:\\Documents\\creation.dll')
valuell.get_section_data.argtypes = [c_char_p]
valuell.get_section_data.restype = ct.c_int16
return hex(valuell.get_creation_data(value_name))
if __name__ == "__main__":
val = get_creation_values('LIMITING')
print(val)
提前感谢您的帮助。如果这太多了,谢谢你的阅读。我会尽力澄清。