@@ -2,6 +2,7 @@ package py3
22
33import (
44 "fmt"
5+ "github.com/aadog/msvcrt-go"
56 "github.com/aadog/py3-go/cpy3"
67 "reflect"
78 "sync"
@@ -17,8 +18,9 @@ const (
1718var pyModuleInitMap = sync.Map{}
1819
1920type PyModuleGoObj struct {
20- moduleDef *cpy3.PyModuleDef
21- CallMap sync.Map
21+ moduleDef *cpy3.PyModuleDef
22+ methodsDef []cpy3.PyMethodDef
23+ CallMap sync.Map
2224}
2325type PyModule struct {
2426 PyObject
@@ -80,7 +82,9 @@ func PyTypeToGoType(p *PyObject) any {
8082
8183 return 0
8284}
85+
8386func PyMethodForward(self *PyModule, args *PyTuple, method interface{}) *PyObject {
87+
8488 methodType := reflect.TypeOf(method)
8589 methodValue := reflect.ValueOf(method)
8690 if methodType.Kind() != reflect.Func {
@@ -138,12 +142,12 @@ var PyModuleMethodForwardCallBack = syscall.NewCallback(func(self uintptr, args
138142})
139143
140144func CreateModule(name string, doc string) *PyModule {
141- var pyModuleMethodCallDefs = make([]cpy3.PyMethodDef, 0)
145+ pyModuleMethodCallDefs : = make([]cpy3.PyMethodDef, 0)
142146 methodCallDef := cpy3.PyMethodDef{
143- Ml_name: cpy3.GoStrToCStr ("Call"),
147+ Ml_name: msvcrt.MallocCString ("Call"),
144148 Ml_meth: PyModuleMethodForwardCallBack,
145149 Ml_flags: 1,
146- Ml_doc: cpy3.GoStrToCStr ("module call forward"),
150+ Ml_doc: msvcrt.MallocCString ("module call forward"),
147151 }
148152 pyModuleMethodCallDefs = append(pyModuleMethodCallDefs, methodCallDef)
149153 moduleNullMethodDef := cpy3.PyMethodDef{
@@ -156,12 +160,13 @@ func CreateModule(name string, doc string) *PyModule {
156160
157161 module := &PyModule{}
158162 module.GoObj = new(PyModuleGoObj)
163+ module.GoObj.methodsDef = pyModuleMethodCallDefs
159164 module.GoObj.moduleDef = &cpy3.PyModuleDef{
160165 M_base: cpy3.PyModuleDef_Base{
161166 Ob_base: cpy3.PyObject_HEAD_INIT(0),
162167 },
163- M_name: cpy3.GoStrToCStr (name),
164- M_doc: cpy3.GoStrToCStr (doc),
168+ M_name: msvcrt.MallocCString (name),
169+ M_doc: msvcrt.MallocCString (doc),
165170 M_size: -1,
166171 M_methods: uintptr(unsafe.Pointer(&pyModuleMethodCallDefs[0])),
167172 M_slots: 0,
0 commit comments