@@ -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