Создание расширения C Python, который требует другого расширения

Я вижу две возможных ситуации здесь. Во-первых, Вы хотите знать, существует ли стандарт SQL для этого, которое можно использовать в целом независимо от базы данных. Нет, нет. Во-вторых, Вы хотите знать относительно определенного продукта DBMS. Тогда необходимо определить его. Но я предполагаю, что наиболее вероятный ответ - то, что Вы возвратите что-то как "a.id, b.id", так как это - то, как необходимо было бы определить столбцы в SQL-выражении. И самый легкий способ узнать, каково значение по умолчанию, состоит в том, чтобы только отправить такой запрос и видеть то, что Вы возвращаете. Если Вы хотите определить, какой префикс прибывает перед точкой можно использовать "ВЫБОР * ОТ AS my_alias", например.

5
задан Javier 17 October 2009 в 20:01
поделиться

3 ответа

/* get the sys.modules dictionary */
PyObject* sysmodules PyImport_GetModuleDict();
PyObject* pygame_module;
if(PyMapping_HasKeyString(sysmodules, "pygame")) {
    pygame_module = PyMapping_GetItemString(sysmodules, "pygame");
} else {
    PyObject* initresult;
    pygame_module = PyImport_ImportModule("pygame");
    if(!pygame_module) {
      /* insert error handling here! and exit this function */
    }
    initresult = PyObject_CallMethod(pygame_module, "init", NULL);
    if(!initresult) {
      /* more error handling &c */
    }
    Py_DECREF(initresult);
}
/* use PyObject_CallMethod(pygame_module, ...) to your heart's contents */
/* and lastly, when done, don't forget, before you exit, to: */
Py_DECREF(pygame_module);
6
ответ дан 14 December 2019 в 01:11
поделиться

Вы можете импортировать модули python из кода C и вызывать объекты, определенные в, точно так же, как вы можете в коде python. Это немного затянуто, но вполне возможно.

Когда я хочу решить, как сделать что-то подобное, я смотрю документацию C API . Раздел импорт модулей поможет. Вам также нужно будет прочитать, как читать атрибуты, вызывать функции и т. Д., Все это находится в документации.

Однако я подозреваю, что вы действительно хотите вызвать базовую библиотеку sdl из C. Это является библиотекой C, и ее действительно легко использовать из C.

Вот пример кода для импорта модуля Python в C, адаптированный из небольшого рабочего кода

PyObject *module = 0;
PyObject *result = 0;
PyObject *module_dict = 0;
PyObject *func = 0;

module = PyImport_ImportModule((char *)"pygame"); /* new ref */
if (module == 0)
{
    PyErr_Print();
    log("Couldn't find python module pygame");
    goto out;
}
module_dict = PyModule_GetDict(module); /* borrowed */
if (module_dict == 0)
{
    PyErr_Print();
    log("Couldn't find read python module pygame");
    goto out;
}
func = PyDict_GetItemString(module_dict, "pygame_function"); /* borrowed */
if (func == 0)
{
    PyErr_Print();
    log("Couldn't find pygame.pygame_function");
    goto out;
}
result = PyEval_CallObject(func, NULL); /* new ref */
if (result == 0)
{
    PyErr_Print();
    log("Couldn't run pygame.pygame_function");
    goto out;
}
/* do stuff with result */
out:;
Py_XDECREF(result);
Py_XDECREF(module);
3
ответ дан 14 December 2019 в 01:11
поделиться

Большинство функций в модуле pygame - это просто оболочки для функций SDL, именно здесь вы надо искать C версию своих функций. pygame.h определяет серию функций import_pygame _ * () . Вызовите import_pygame_base () и другие один раз при инициализации модуля расширения, чтобы получить доступ к необходимой части C API модулей pygame (это определено в заголовочном файле для каждого из них). Поиск кода Google предоставит вам несколько примеров .

0
ответ дан 14 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: