func InitModule(name string, methods []Method) (*Module, error) { cName := C.CString(name) defer C.free(unsafe.Pointer(cName)) m := C.Py_InitModule4(cName, nil, nil, nil, C.PYTHON_API_VERSION) if m == nil { return nil, exception() } if len(methods) == 0 { return newModule(m), nil } n := C.PyString_FromString(cName) if n == nil { return nil, exception() } d := C.PyModule_GetDict(m) if d == nil { return nil, exception() } for _, method := range methods { pyF, err := makeCFunction(method.Name, method.Func, method.Doc, n) if err != nil { return nil, err } if C.PyDict_SetItemString(d, C.CString(method.Name), c(pyF)) != 0 { return nil, exception() } } return newModule(m), nil }
// SetItemString inserts "val" into dictionary d with the key "key" (or rather, // with a *String with the value of "key" will be used as the key). If "key" is // not hashable, then a TypeError will be returned. func (d *Dict) SetItemString(key string, val Object) error { s := C.CString(key) defer C.free(unsafe.Pointer(s)) ret := C.PyDict_SetItemString(c(d), s, c(val)) return int2Err(ret) }
// SetItemString inserts "val" into dictionary d with the key "key" (or rather, // with a *String with the value of "key" will be used as the key). If "key" is // not hashable, then a TypeError will be returned. func (d *Dict) SetItemString(key string, val *Base) error { s := C.CString(key) defer C.free(unsafe.Pointer(s)) ret := C.PyDict_SetItemString(d.c(), s, val.c()) return int2Err(ret) }