Создать объект Python уже обернутой библиотеки в C / C ++? - PullRequest
1 голос
/ 31 января 2012

Можно ли создать Python-оболочку из C-указателя для уже упакованной библиотеки, такой как pywin32 или PyOpenGL в C / C ++?

Можете ли вы заполнить / исправить этот кодфрагмент для меня?

#include <windows.h>
#include <the_magical_pywin32_header.h>
PyObject* PyObject_fromHWND(HWND window) {
    // ...
}

1 Ответ

1 голос
/ 01 февраля 2012
#include <windows.h>
#include <Python.h>
#include <pythonwin/win32win.h> // Make sure this is in the include path

static PyObject *g_pModule = NULL;

PyObject* PyObject_fromHWND(HWND window)
{
    PyObject *pName, *pArgs, *pValue;
    if (g_pModule == NULL) {
        char name[] = "pythonwin/win32gui.py";  // Replace with the full path
        pName = PyString_FromString(name);
        g_pModule = PyImport_Import(pName);
        py_DECREF(pName);
        if (g_pModule == NULL) {
            // Report an error
        }
    }
    pArgs = PyTuple_New(1);
    pValue = PyInt_FromLong(static_cast<long>(window));
    PyTuple_SetItem(pArgs, 0, pValue);
    PyObject *pWindow = PyCWnd::CreateWindowFromHandle(g_pModule, pArgs);
    Py_DECREF(pValue);
    Py_DECREF(pArgs);
    return pWindow;
} 
...