PyImport_ExecCodeModuleでモジュールを実行した後、importしないと使えない。

#include <Python.h>

int main(void) {
Py_Initialize();

FILE *fp;

const char* module_code =
"class Hello:\n"
" def __init__(self, message):\n"
" self.message = message\n"
" def say(self):\n"
" print 'hello %s' % self.message\n"
;

// エラーハンドリング省略
PyObject* compiled_code = Py_CompileString(module_code, "hello.py", Py_file_input);
PyObject* module = PyImport_ExecCodeModule("hello", compiled_code);
Py_XDECREF(compiled_code);

// ↓これでは動かない
// PyImport_ImportModule("hello");

const char* main_code =
"import hello\n" // ←これが必要
"h = hello.Hello('world')\n"
"h.say()"
;

PyRun_SimpleString(main_code);

Py_Finalize();

return 0;
}