@@ -8,17 +8,20 @@ import (
88 "unsafe"
99)
1010
11+ var ModuleMethodsDef = sync.Map {}
12+ var ModuleDefMap = sync.Map {}
1113var PyMethodMap = sync.Map {}
1214var pyModuleInitMap = sync.Map {}
15+
1316var PyMethodCallBack = syscall .NewCallback (func (self uintptr , args uintptr ) uintptr {
1417 pyArgs := PyTupleFromInst (args )
1518 pyArgsLen := pyArgs .Size ()
1619 if pyArgsLen < 1 {
1720 return Py_RETURN_NONE ().instance
1821 }
19- code := pyArgs .GetItem (0 )
22+ code := pyArgs .GetItem (0 ). Str ()
2023
21- ifn , ok := PyMethodMap .Load (code . Str () )
24+ ifn , ok := PyMethodMap .Load (code )
2225 if ok == false {
2326 return Py_RETURN_NONE ().Instance ()
2427 }
@@ -102,20 +105,31 @@ func CreateModule(def *PyModuleDef) *PyObject {
102105 methods := make ([]cpy3.PyMethodDef , 0 )
103106 for _ , method := range def .MethodDefs {
104107 methodName := method .Name
105- methods = append (methods , cpy3.PyMethodDef {
106- Ml_name : cpy3 .GoStrToCStr (method .Name ),
107- Ml_meth : NewMethodCallBack (moduleName , methodName , method .Method ),
108- Ml_flags : method .flags ,
109- Ml_doc : cpy3 .GoStrToCStr (method .Doc ),
110- })
108+ NewMethodCallBack (moduleName ,methodName ,method .Method )
109+ //methodDef := cpy3.PyMethodDef{
110+ // Ml_name: cpy3.GoStrToCStr(method.Name),
111+ // Ml_meth: NewMethodCallBack(moduleName, methodName, method.Method),
112+ // Ml_flags: method.flags,
113+ // Ml_doc: cpy3.GoStrToCStr(method.Doc),
114+ //}
115+ //methods = append(methods, methodDef)
111116 }
112- methods = append (methods , cpy3.PyMethodDef {
117+ methodCallDef := cpy3.PyMethodDef {
118+ Ml_name : cpy3 .GoStrToCStr ("Call" ),
119+ Ml_meth : PyMethodCallBack ,
120+ Ml_flags : 1 ,
121+ Ml_doc : cpy3 .GoStrToCStr ("跳转程序" ),
122+ }
123+ methods = append (methods , methodCallDef )
124+ moduleNullMethodDef := cpy3.PyMethodDef {
113125 Ml_name : 0 ,
114126 Ml_meth : 0 ,
115127 Ml_flags : 0 ,
116128 Ml_doc : 0 ,
117- })
129+ }
130+ methods = append (methods , moduleNullMethodDef )
118131
132+ ModuleMethodsDef .Store (fmt .Sprintf ("%s" , moduleName ), methods )
119133 moduleDef := cpy3.PyModuleDef {
120134 M_base : cpy3.PyModuleDef_Base {
121135 Ob_base : cpy3 .PyObject_HEAD_INIT (0 ),
@@ -129,6 +143,10 @@ func CreateModule(def *PyModuleDef) *PyObject {
129143 M_clear : 0 ,
130144 M_free : 0 ,
131145 }
132- ptr := cpy3 .PyModule_Create2 (uintptr (unsafe .Pointer (& moduleDef )), 1013 )
133- return PyObjectFromInst (ptr )
146+ ModuleDefMap .Store (moduleName , def )
147+
148+ pyObj := PyObjectFromInst (cpy3 .PyModule_Create2 (uintptr (unsafe .Pointer (& moduleDef )), 1013 ))
149+ //不知道为啥非要IncRef一次才不会崩溃
150+ pyObj .IncRef ()
151+ return pyObj
134152}
0 commit comments