У меня есть большой массив в файле, который я не могу изменить, но мне нужен доступ в C ++.Мне нужно перебрать массив и вернуть значение скрипту Python.
Проблема: я могу найти элемент в массиве по его имени.Когда я пытаюсь вернуть его значение и элементы section в оболочку Python, они возвращают 0 или -1 независимо от того, каково их действительное значение.Вот пример первого элемента в массиве из external_lists.h:
info_struct A1[] = {
{ "LIMITING", {{0x00, 0x02, 0xFF}}
.........
}
Этот массив имеет тысячи похожих элементов.Когда я запускаю следующий код, я получаю 0x
или -0x1
.Valuedll.cpp:
#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
сделан из следующей структуры:
struct info_struct{
const char* name;
style_length style[MAX_SIZE];
options_length options[MAX_SIZE];
}
Мне нужно получить значения, которые находятся в массиве стилей.Структура style_length имеет следующий вид:
struct style_length{
uint16_t value, section;
option_bits obits;
}
Моя оболочка Python выглядит следующим образом:
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)
Вывод:
(-0x1)
Заранее благодарим за любую помощь.Если это слишком много, спасибо за чтение.Я постараюсь уточнить.