C - доступ к переменной из другой функции - PullRequest
0 голосов
/ 15 апреля 2020

В настоящее время я работаю над проектом, в котором я написал значительную часть в C, а кто-то еще написал большую часть в Python. Нам нужно связать их вместе, но я не могу понять, как обращаться с моими переменными, чтобы они могли быть переданы на сторону Python. Часть Python будет основным «родителем», поэтому потребуется иметь возможность вызывать функции в моем коде C для получения и изменения моих переменных.

В настоящее время я настраиваю структуры в начале мой файл, а затем определение структур в моей функции init(). Затем я передаю эти структуры, содержащие некоторые из моих переменных между функциями, для облегчения передачи переменных (я использую GTK, поэтому использовал структуры для передачи нескольких переменных в мои обратные вызовы).

Так что, если у меня есть переменная с именем variableA определенная в глобальной структуре с экземпляром, который затем определен в моей функции init(), которая уже используется программой, мне нужен код Python, чтобы иметь возможность вызывать такую ​​функцию, как get_variable_a(), и иметь функцию return текущее значение variableA, однако, поскольку эта функция будет вызываться только внешним кодом Python, но не функцией init(), я, очевидно, не могу передать свою структуру в нее при запуске.

Я стараюсь максимально избегать глобальных переменных, но в настоящее время изо всех сил пытаюсь найти способ обойти это. Извините, я довольно новичок в C, поэтому все еще начинаю с ним разбираться.

Пример грубого кода, чтобы помочь продемонстрировать, что я имею в виду:

struct vars {
    char* variableA[10][10];
    int variableB;
}

char* get_variable_a() {
    // This function is called externally by the Python code
    // RETURN THE VALUE OF VARIABLE A FROM BELOW
}


void example_function(struct vars *myVars) {
    myVars->variableA[0][0] = "test";
}

void init() {

    struct vars *myVars = g_new0(struct vars, 1);
    example_function(myVars);

}

int main() {
    init();
}

Мне также нужно быть в состоянии заставить функцию возвращать двумерный массив и в настоящее время пытаюсь получить C, позвольте мне сделать это.

Любая помощь будет принята с благодарностью, спасибо.

...