@@ -27,56 +27,67 @@ LuaUnityExportPropertyDescriptor::LuaUnityExportPropertyDescriptor(std::string n
2727
2828LuaValue* LuaUnityExportPropertyDescriptor::invokeGetter (LuaSession *session, LuaObjectDescriptor *instance)
2929{
30- if (_getterHandler != NULL && canRead ())
30+ LuaValue *retValue = NULL ;
31+ if (canRead ())
3132 {
32- void *returnBuffer = _getterHandler (typeDescriptor -> objectId (), (long long ) instance -> getObject (), name ().c_str ());
33-
34- LuaValue *retValue = NULL ;
35- if (returnBuffer != NULL )
33+ if (_getterHandler != NULL )
3634 {
37- LuaObjectDecoder *decoder = new LuaObjectDecoder (session -> getContext (), returnBuffer);
38- retValue = dynamic_cast <LuaValue *>(decoder -> readObject ());
39- decoder -> release ();
40-
41- // 释放C#中申请的内存
42- free (returnBuffer);
35+ void *returnBuffer = _getterHandler (typeDescriptor -> objectId (), (long long ) instance -> getObject (), name ().c_str ());
36+ if (returnBuffer != NULL )
37+ {
38+ LuaObjectDecoder *decoder = new LuaObjectDecoder (session -> getContext (), returnBuffer);
39+ retValue = dynamic_cast <LuaValue *>(decoder -> readObject ());
40+ decoder -> release ();
41+
42+ // 释放C#中申请的内存
43+ free (returnBuffer);
44+ }
45+ else
46+ {
47+ retValue = LuaValue::NilValue ();
48+ }
4349 }
4450 else
4551 {
46- retValue = LuaValue::NilValue ( );
52+ retValue = LuaExportPropertyDescriptor::invokeGetter (session, instance );
4753 }
48-
49- return retValue;
5054 }
5155
52- return NULL ;
56+ return retValue ;
5357}
5458
5559void LuaUnityExportPropertyDescriptor::invokeSetter (LuaSession *session, LuaObjectDescriptor *instance, LuaValue *value)
5660{
57- if (_setterHandler != NULL && canWrite ())
61+ if (canWrite ())
5862 {
59- LuaObjectEncoder *encoder = new LuaObjectEncoder (session -> getContext ());
60- if (value != NULL )
63+ if (_setterHandler != NULL )
6164 {
62- encoder -> writeObject (value);
65+ LuaObjectEncoder *encoder = new LuaObjectEncoder (session -> getContext ());
66+ if (value != NULL )
67+ {
68+ encoder -> writeObject (value);
69+ }
70+ else
71+ {
72+ LuaValue *nilValue = LuaValue::NilValue ();
73+ encoder -> writeObject (nilValue);
74+ nilValue -> release ();
75+ }
76+
77+ // valueBuf的内容由C#端进行释放
78+ const void *valueBuf = encoder -> cloneBuffer ();
79+
80+ _setterHandler (typeDescriptor -> objectId (),
81+ (long long ) instance -> getObject (),
82+ name ().c_str (),
83+ valueBuf,
84+ encoder -> getBufferLength ());
85+
86+ encoder -> release ();
6387 }
6488 else
6589 {
66- LuaValue *nilValue = LuaValue::NilValue ();
67- encoder -> writeObject (nilValue);
68- nilValue -> release ();
90+ LuaExportPropertyDescriptor::invokeSetter (session, instance, value);
6991 }
70-
71- // valueBuf的内容由C#端进行释放
72- const void *valueBuf = encoder -> cloneBuffer ();
73-
74- _setterHandler (typeDescriptor -> objectId (),
75- (long long ) instance -> getObject (),
76- name ().c_str (),
77- valueBuf,
78- encoder -> getBufferLength ());
79-
80- encoder -> release ();
8192 }
8293}
0 commit comments