public static string GetMethodDeclare(MethodInfo method, ref bool bNeedExport) { bNeedExport = true; string szFullName = method.Name; ParameterInfo[] allParams = method.GetParameters(); string szCallParam = string.Empty; string szParamName = string.Empty; if (allParams != null) { Type nParamType; for (int i = 0; i < allParams.Length; ++i) { nParamType = allParams[i].ParameterType; if (i > 0) { szCallParam += ','; } FCValueType value = TransType(nParamType); szParamName = value.GetTypeName(false); if (szParamName.IndexOf('*') != -1) { bNeedExport = false; return(string.Empty); } szCallParam += szParamName; szCallParam += " "; szCallParam += allParams[i].Name; } } return(szFullName + szCallParam); }
void PushConstructor(ConstructorInfo cons) { ParameterInfo[] allParams = cons.GetParameters(); string szCallParam = string.Empty; Type nParamType; if (allParams != null) { for (int i = 0; i < allParams.Length; ++i) { ParameterInfo param = allParams[i]; nParamType = param.ParameterType; PushNameSpace(nParamType.Namespace); PushDelayType(nParamType); PushRefType(nParamType); if (i > 0) { szCallParam += ','; } FCValueType value = FCValueType.TransType(nParamType); szCallParam += value.GetTypeName(false); szCallParam = szCallParam + " " + param.Name; } } m_szTempBuilder.AppendFormat(" public {0}({1}){{}}\r\n", FCValueType.GetClassName(m_nClassType), szCallParam); }
void MakeOutList(FCValueType value) { StringBuilder fileData = m_szTempBuilder; string szTypeName = value.GetTypeName(true, true); string szFuncDeclare = string.Format(" public static void OutList({0} rList, long L, int nIndex)", szTypeName); if (TrySetExportFlag(szFuncDeclare)) { return; } fileData.AppendLine(szFuncDeclare); fileData.AppendLine(" {"); fileData.AppendLine(" try"); fileData.AppendLine(" {"); fileData.AppendLine(" int nCount = rList != null ? rList.Count : 0;"); fileData.AppendLine(" long ptr = FCLibHelper.fc_get_param_ptr(L, nIndex);"); fileData.AppendLine(" FCLibHelper.fc_set_array_size(ptr, nCount);"); if (FCValueType.IsRefType(value.m_nValueType)) { fileData.AppendFormat(" {0} v;\r\n", value.GetValueName(true)); } fileData.AppendLine(" for(int i = 0; i<nCount; ++i)"); fileData.AppendLine(" {"); fileData.AppendLine(" long pItem = FCLibHelper.fc_get_array_node_temp_ptr(ptr, i);"); MakeOutListElement(value); fileData.AppendLine(" }"); fileData.AppendLine(" }"); fileData.AppendLine(" catch(Exception e)"); fileData.AppendLine(" {"); fileData.AppendLine(" Debug.LogException(e);"); fileData.AppendLine(" }"); fileData.AppendLine(" }"); }
void MakeDeleteCallFunc(Type nClassType) { // 得到委托的参数 MethodInfo method = nClassType.GetMethod("Invoke"); ParameterInfo[] allParams = method.GetParameters(); // 函数参数 FCValueType ret_value = FCValueType.TransType(method.ReturnType); string szCallDesc = string.Empty; int nParamCount = allParams != null ? allParams.Length : 0; for (int i = 0; i < nParamCount; ++i) { FCValueType value_param = FCValueType.TransType(allParams[i].ParameterType); if (i > 0) { szCallDesc += ","; } szCallDesc += string.Format("{0} arg{1}", value_param.GetTypeName(true, true), i); } m_szTempBuilder.AppendFormat(" public {0} CallFunc({1})\r\n", ret_value.GetTypeName(true, true), szCallDesc); m_szTempBuilder.AppendLine(" {"); m_szTempBuilder.AppendLine(" try"); m_szTempBuilder.AppendLine(" {"); string szArg = string.Empty; for (int i = 0; i < nParamCount; ++i) { szArg = string.Format("arg{0}", i); FCValueType value_param = FCValueType.TransType(allParams[i].ParameterType); if (value_param.m_nTemplateType != fc_value_tempalte_type.template_none) { Debug.LogError(nClassType.FullName + "参数不支持模板"); continue; } if (FCValueType.IsRefType(value_param.m_nValueType)) { m_szTempBuilder.AppendFormat(" FCDll.PushCallParam(ref {0});\r\n", szArg); } else { m_szTempBuilder.AppendFormat(" FCDll.PushCallParam({0});\r\n", szArg); } } m_szTempBuilder.AppendLine(" FCLibHelper.fc_call(m_nThisPtr, m_szFuncName);"); m_szTempBuilder.AppendLine(" }"); m_szTempBuilder.AppendLine(" catch(Exception e)"); m_szTempBuilder.AppendLine(" {"); m_szTempBuilder.AppendLine(" Debug.LogException(e);"); m_szTempBuilder.AppendLine(" }"); m_szTempBuilder.AppendLine(" }"); }
public static void OutputRefScriptParam(StringBuilder fileData, string szLeftEmpty, FCValueType value, string szLeftName, string Ptr, string szIndex, bool bTempValue) { if (value.IsArray) { fileData.AppendFormat("{0}FCCustomParam.OutArray({1}, {2}, {3});\r\n", szLeftEmpty, szLeftName, Ptr, szIndex); return; } else if (value.IsList) { fileData.AppendFormat("{0}FCCustomParam.OutList({1}, {2}, {3});\r\n", szLeftEmpty, szLeftName, Ptr, szIndex); return; } else if (value.IsMap) { fileData.AppendFormat("{0}FCCustomParam.OutDictionary({1}, {2}, {3});\r\n", szLeftEmpty, szLeftName, Ptr, szIndex); return; } // string szOutPtr = string.Format("nOutPtr{0}", szIndex); string szValueName = string.Format("arg{0}", szIndex); fileData.AppendFormat("{0}long {1} = FCLibHelper.fc_get_param_ptr({2}, {3});\r\n", szLeftEmpty, szOutPtr, Ptr, szIndex); string szType = value.GetTypeName(true, true); if (IsBaseType(value.m_nValueType)) { string szFuncAddr = GetFCLibFuncShortName(value.m_nValueType); if (IsRefType(value.m_nValueType)) { fileData.AppendFormat("{0}FCLibHelper.fc_set_value_{1}({2}, ref {3});\r\n", szLeftEmpty, szFuncAddr, szOutPtr, szValueName); } else { fileData.AppendFormat("{0}FCLibHelper.fc_set_value_{1}({2}, {3});\r\n", szLeftEmpty, szFuncAddr, szOutPtr, szValueName); } return; } fileData.AppendFormat("{0}FCLibHelper.fc_set_value_intptr({1}, FCGetObj.PushObj({2}));\r\n", szLeftEmpty, szOutPtr, szValueName); }
void AddReturnCmd(FCValueType ret_value) { // 目前不是所有的类型都支持返回 switch (ret_value.m_nValueType) { case fc_value_type.fc_value_bool: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_bool();"); break; case fc_value_type.fc_value_char: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_char();"); break; case fc_value_type.fc_value_byte: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_byte();"); break; case fc_value_type.fc_value_short: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_short();"); break; case fc_value_type.fc_value_ushort: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_ushort();"); break; case fc_value_type.fc_value_int: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_int();"); break; case fc_value_type.fc_value_uint: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_uint();"); break; case fc_value_type.fc_value_float: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_float();"); break; case fc_value_type.fc_value_double: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_double();"); break; case fc_value_type.fc_value_int64: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_int64();"); break; case fc_value_type.fc_value_uint64: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_uint64();"); break; case fc_value_type.fc_value_string_a: m_szTempBuilder.AppendLine(" ret = FCLibHelper.fc_get_return_string_a();"); break; case fc_value_type.fc_value_vector2: m_szTempBuilder.AppendLine(" FCLibHelper.fc_get_return_vector2(ref ret);"); break; case fc_value_type.fc_value_vector3: m_szTempBuilder.AppendLine(" FCLibHelper.fc_get_return_vector3(ref ret);"); break; case fc_value_type.fc_value_vector4: m_szTempBuilder.AppendLine(" FCLibHelper.fc_get_return_vector4(ref ret);"); break; case fc_value_type.fc_value_system_object: { string szName = ret_value.GetTypeName(true, true); m_szTempBuilder.AppendLine(" long nWrapObj = FCLibHelper.fc_get_return_wrap_objptr();"); m_szTempBuilder.AppendFormat(" ret = FCGetObj.GetSystemObj<{0}>(nWrapObj);", szName); } break; case fc_value_type.fc_value_unity_object: case fc_value_type.fc_value_object: { string szName = ret_value.GetTypeName(true, true); m_szTempBuilder.AppendLine(" long nWrapObj = FCLibHelper.fc_get_return_wrap_objptr();"); m_szTempBuilder.AppendFormat(" ret = FCGetObj.GetObj<{0}>(nWrapObj);", szName); } break; case fc_value_type.fc_value_int_ptr: m_szTempBuilder.AppendLine(" ret = new IntPtr(FCLibHelper.fc_get_return_void_ptr());"); break; } m_szTempBuilder.AppendLine(" return ret;"); }
void SetMemberValue(StringBuilder fileData, string szLeftEmpty, FCValueType value, string szLeftName, string Ptr, string szIndex, bool bTempValue, bool bOut) { string szCSharpName = value.GetTypeName(true, true); string szDefine = string.Empty; if (bTempValue) { szDefine = szCSharpName + " "; } if (value.IsArray) { fileData.AppendFormat("{0}{1} {2} = null;\r\n", szLeftEmpty, szCSharpName, szLeftName); fileData.AppendFormat("{0}{1} = FCCustomParam.GetArray(ref {2},{3},{4});\r\n", szLeftEmpty, szLeftName, szLeftName, Ptr, szIndex); return; } else if (value.IsList) { fileData.AppendFormat("{0}{1} {2} = null;\r\n", szLeftEmpty, szCSharpName, szLeftName); fileData.AppendFormat("{0}{1} = FCCustomParam.GetList(ref {2},{3},{4});\r\n", szLeftEmpty, szLeftName, szLeftName, Ptr, szIndex); return; } else if (value.IsMap) { fileData.AppendFormat("{0}{1} {2} = null;\r\n", szLeftEmpty, szCSharpName, szLeftName); fileData.AppendFormat("{0}{1} = FCCustomParam.GetDictionary(ref {2},{3},{4});\r\n", szLeftEmpty, szLeftName, szLeftName, Ptr, szIndex); return; } string szFuncAppend = FCValueType.GetFCLibFuncShortName(value.m_nValueType); if (string.IsNullOrEmpty(szFuncAppend)) { if (value.m_nValueType == fc_value_type.fc_value_enum) { fileData.AppendFormat("{0}{1}{2} = ({3})(FCLibHelper.fc_get_int({4},{5}));\r\n", szLeftEmpty, szDefine, szLeftName, szCSharpName, Ptr, szIndex); return; } if (value.m_nValueType == fc_value_type.fc_value_int_ptr) { fileData.AppendFormat("{0}{1}{2} = ({3})(FCLibHelper.fc_get_intptr({4},{5}));\r\n", szLeftEmpty, szDefine, szLeftName, szCSharpName, Ptr, szIndex); return; } if (value.m_nValueType == fc_value_type.fc_value_system_object) { fileData.AppendFormat("{0}{1}{2} = FCGetObj.GetObj<System.Object>(FCLibHelper.fc_get_intptr({3},{4}));\r\n", szLeftEmpty, szDefine, szLeftName, Ptr, szIndex); return; } if (value.m_nValueType == fc_value_type.fc_value_unity_object) { fileData.AppendFormat("{0}{1}{2} = FCGetObj.GetObj<UnityObject>(FCLibHelper.fc_get_intptr({3},{4}));\r\n", szLeftEmpty, szDefine, szLeftName, Ptr, szIndex); return; } if (value.m_nValueType == fc_value_type.fc_value_delegate) { string szDelegateClassName = string.Format("{0}_deletate", value.GetDelegateName(true)); m_deleteWrap.PushDelegateWrap(value.m_value, szDelegateClassName); fileData.AppendFormat("{0}{1} func{2} = FCDelegateMng.Instance.GetDelegate<{3}>({4},{5});\r\n", szLeftEmpty, szDelegateClassName, szIndex, szDelegateClassName, Ptr, szIndex); fileData.AppendFormat("{0}{1} arg{2} = null;\r\n", szLeftEmpty, szCSharpName, szIndex); fileData.AppendFormat("{0}if(func{1} != null)\r\n", szLeftEmpty, szIndex); fileData.AppendFormat("{0} arg{1} = func{2}.CallFunc;\r\n", szLeftEmpty, szIndex, szIndex); fileData.AppendFormat("{0}// 尽量不要在函数参数中传递委托指针,这个无法自动托管,要尽可能是使用get, set属性方法\r\n", szLeftEmpty); fileData.AppendFormat("{0}// 如果在参数中传递了委托指针,请在对应的函数中调用FCDelegateMng.Instance.RecordDelegate(delegate_func, func);\r\n", szLeftEmpty); //fileData.AppendFormat("{0}else\r\n", szLeftEmpty, szIndex); //fileData.AppendFormat("{0} arg{1} = null;\r\n", szLeftEmpty, szIndex); //fileData.AppendFormat("{0}FCDelegateMng.Instance.RecordDelegate({1}, func{2});\r\n", szLeftEmpty, szLeftName, szIndex); // 这里不能调用这个,对象不一样的噢 return; } } else { if (FCValueType.IsGraphicType(value.m_nValueType)) { fileData.AppendFormat("{0}{1} {2} = new {3}();\r\n", szLeftEmpty, szCSharpName, szLeftName, szCSharpName); fileData.AppendFormat("{0}FCLibHelper.fc_get_{1}({2},{3},ref {4});\r\n", szLeftEmpty, szFuncAppend, Ptr, szIndex, szLeftName); return; } else { fileData.AppendFormat("{0}{1}{2} = FCLibHelper.fc_get_{3}({4},{5});\r\n", szLeftEmpty, szDefine, szLeftName, szFuncAppend, Ptr, szIndex); return; } } fileData.AppendFormat("{0}{1}{2} = FCGetObj.GetObj<{3}>(FCLibHelper.fc_get_intptr({4},{5}));\r\n", szLeftEmpty, szDefine, szLeftName, szCSharpName, Ptr, szIndex); }
// 功能:添加函数调用的方法 void PushMethodInfo(MethodInfo method) { if (0 != (MethodAttributes.SpecialName & method.Attributes)) { return; } if (m_bPartWrap) { if (!method.IsDefined(typeof(PartWrapAttribute), false)) { return; } } // 如果该函数有不导出的标记 if (method.IsDefined(typeof(DontWrapAttribute), false)) { return; } if (method.IsDefined(typeof(ObsoleteAttribute), false)) { return; } string szMethodName = method.ToString(); bool bTemplateFunc = IsTemplateFunc(method); // 模板函数暂时不导出吧 if (bTemplateFunc) { return; } FCValueType ret_value = m_templateWrap.PushReturnTypeWrap(method.ReturnType); PushNameSpace(method.ReturnType.Namespace); int nSameNameCount = 0; if (m_CurSameName.TryGetValue(method.Name, out nSameNameCount)) { } m_CurSameName[method.Name] = nSameNameCount + 1; int nFuncCount = 0; m_CurFuncCount.TryGetValue(method.Name, out nFuncCount); WrapFuncDesc func = new WrapFuncDesc(); func.m_bAttrib = false; func.m_szName = method.Name; if (nSameNameCount > 0) { func.m_szGetName = func.m_szSetName = string.Format("{0}{1}_wrap", method.Name, nSameNameCount); } else { func.m_szGetName = func.m_szSetName = string.Format("{0}_wrap", method.Name); } m_szTempBuilder.Length = 0; StringBuilder fileData = m_szTempBuilder; ParameterInfo[] allParams = method.GetParameters(); // 函数参数 Type nRetType = method.ReturnType; // 返回值 int nParamCount = allParams != null ? allParams.Length : 0; bool bEqualFunc = func.m_szName == "Equals"; fileData.AppendLine(" [MonoPInvokeCallbackAttribute(typeof(FCLibHelper.fc_call_back_inport_class_func))]"); fileData.AppendFormat(" public static int {0}(long L)\r\n", func.m_szSetName); fileData.AppendLine(" {"); fileData.AppendLine(" try"); fileData.AppendLine(" {"); fileData.AppendLine(" long nThisPtr = FCLibHelper.fc_get_inport_obj_ptr(L);"); fileData.AppendFormat(" {0} obj = get_obj(nThisPtr);\r\n", m_szCurClassName); // 处理函数参数 Type nParamType; string szLeftName = string.Empty; string szCallParam = string.Empty; string szLeftType = string.Empty; bool bStatic = method.IsStatic; string szFullFuncName = method.Name; for (int i = 0; i < nParamCount; ++i) { ParameterInfo param = allParams[i]; nParamType = param.ParameterType; szLeftName = string.Format("arg{0}", i); PushNameSpace(nParamType.Namespace); FCValueType param_value = FCTemplateWrap.Instance.PushGetTypeWrap(nParamType); if (param.IsOut) { string szCSharpName = param_value.GetTypeName(true); fileData.AppendFormat(" {0} {1};\r\n", szCSharpName, szLeftName); } else { SetMemberValue(fileData, " ", param_value, szLeftName, "L", i.ToString(), true, param.IsOut); } if (i > 0) { szCallParam += ','; } if (param.IsOut) { szCallParam += "out "; } else if (nParamType.IsByRef) { szCallParam += "ref "; } szCallParam += szLeftName; szFullFuncName = szFullFuncName + '_' + param_value.GetTypeName(false); } // 处理返回值 if (ret_value.m_nValueType == fc_value_type.fc_value_void) { if (bStatic) { fileData.AppendFormat(" {0}.{1}({2});\r\n", m_szCurClassName, func.m_szName, szCallParam); } else { fileData.AppendFormat(" obj.{0}({1});\r\n", func.m_szName, szCallParam); } } else { string szCShareRetName = ret_value.GetTypeName(true); if (bStatic) { fileData.AppendFormat(" {0} ret = {1}.{2}({3});\r\n", szCShareRetName, m_szCurClassName, func.m_szName, szCallParam); } else { fileData.AppendFormat(" {0} ret = obj.{1}({2});\r\n", szCShareRetName, func.m_szName, szCallParam); } } // 处理输出参数 for (int i = 0; i < nParamCount; ++i) { ParameterInfo param = allParams[i]; nParamType = param.ParameterType; szLeftName = string.Format("arg{0}", i); if (param.IsOut || nParamType.IsByRef) { FCValueType value = PushOutParamWrap(nParamType); fileData.Append(FCValueType.ModifyScriptCallParam(" ", value, szLeftName, "L", i.ToString(), true)); } } // 处理返回值 if (ret_value.m_nValueType != fc_value_type.fc_value_void) { FCValueType.PushReturnValue(fileData, " ", ret_value, "L", "ret", false); } fileData.AppendLine(" }"); fileData.AppendLine(" catch(Exception e)"); fileData.AppendLine(" {"); fileData.AppendLine(" Debug.LogException(e);"); fileData.AppendLine(" }"); fileData.AppendLine(" return 0;"); fileData.AppendLine(" }"); func.m_szContent = fileData.ToString(); if (nFuncCount > 1) { func.m_szRegister = string.Format("FCLibHelper.fc_register_class_func(nClassName,\"{0}\",{1});", szFullFuncName, func.m_szGetName); } else { func.m_szRegister = string.Format("FCLibHelper.fc_register_class_func(nClassName,\"{0}\",{1});", func.m_szName, func.m_szGetName); } m_CurClassFunc.Add(func); }
void MakeParamNew(ConstructorInfo conInfo, int nFuncIndex) { ParameterInfo[] allParams = conInfo.GetParameters(); if (allParams == null || allParams.Length == 0) { MakeDefNew(); return; } m_szTempBuilder.Length = 0; StringBuilder fileData = m_szTempBuilder; fileData.AppendLine(" [MonoPInvokeCallbackAttribute(typeof(FCLibHelper.fc_call_back_inport_class_func))]"); fileData.AppendFormat(" public static int obj_new{0}(long L)\r\n", nFuncIndex); fileData.AppendLine(" {"); fileData.AppendLine(" try"); fileData.AppendLine(" {"); string szCallParam = string.Empty; Type nParamType; string szLeftName = string.Empty; for (int i = 0; i < allParams.Length; ++i) { ParameterInfo param = allParams[i]; nParamType = param.ParameterType; FCValueType param_value = FCTemplateWrap.Instance.PushGetTypeWrap(nParamType); szLeftName = string.Format("arg{0}", i); if (param.IsOut) { string szCSharpName = param_value.GetTypeName(true); fileData.AppendFormat(" {0} {1};\r\n", szCSharpName, szLeftName); } else { SetMemberValue(fileData, " ", param_value, szLeftName, "L", i.ToString(), true, param.IsOut); } if (i > 0) { szCallParam += ','; } if (param.IsOut) { szCallParam += "out "; } else if (nParamType.IsByRef) { szCallParam += "ref "; } szCallParam += szLeftName; } fileData.AppendFormat(" {0} obj = new {1}({2});\r\n", m_szCurClassName, m_szCurClassName, szCallParam); fileData.AppendFormat(" long nPtr = FCGetObj.PushNewObj<{0}>(obj);\r\n", m_szCurClassName); fileData.AppendLine(" long ret = FCLibHelper.fc_get_return_ptr(L);"); fileData.AppendLine(" FCLibHelper.fc_set_value_intptr(ret, nPtr);"); fileData.AppendLine(" }"); fileData.AppendLine(" catch(Exception e)"); fileData.AppendLine(" {"); fileData.AppendLine(" Debug.LogException(e);"); fileData.AppendLine(" }"); fileData.AppendLine(" return 0;"); fileData.AppendLine(" }"); WrapFuncDesc func = new WrapFuncDesc(); func.m_szName = m_szCurClassName; func.m_szGetName = func.m_szSetName = string.Format("obj_new{0}", nFuncIndex); func.m_bAttrib = false; func.m_szContent = fileData.ToString(); func.m_szRegister = string.Format("FCLibHelper.fc_register_class_func(nClassName, \"{0}\", {1});", m_szCurClassName, func.m_szGetName); m_CurClassFunc.Insert(0, func); }
// 功能:添加函数调用的方法 void PushMethodInfo(MethodInfo method) { if (0 != (MethodAttributes.SpecialName & method.Attributes)) { return; } if (m_bPartWrap) { if (!method.IsDefined(typeof(PartWrapAttribute), false)) { return; } } // 如果该函数有不导出的标记 if (method.IsDefined(typeof(DontWrapAttribute), false)) { return; } if (method.IsDefined(typeof(ObsoleteAttribute), false)) { return; } // 模板函数不导出了吧 if (IsTemplateFunc(method)) { return; } bool bStatic = method.IsStatic; string szStatic = string.Empty; if (bStatic) { szStatic = "static "; } ParameterInfo[] allParams = method.GetParameters(); // 函数参数 string szCallParam = string.Empty; if (allParams != null) { Type nParamType; string szParamType = string.Empty; for (int i = 0; i < allParams.Length; ++i) { nParamType = allParams[i].ParameterType; if (i > 0) { szCallParam += ','; } PushNameSpace(nParamType.Namespace); PushRefType(nParamType); FCValueType value = FCValueType.TransType(nParamType); szCallParam += value.GetTypeName(false); szCallParam += " "; szCallParam += allParams[i].Name; } } PushNameSpace(method.ReturnType.Namespace); PushRefType(method.ReturnType); FCValueType ret_value = FCValueType.TransType(method.ReturnType); if (ret_value.m_nTemplateType != fc_value_tempalte_type.template_none) { m_szTempBuilder.AppendFormat(" public {0}{1} {2}({3}){{ return null; }}\r\n", szStatic, ret_value.GetTypeName(false), method.Name, szCallParam); } else if (ret_value.m_nValueType == fc_value_type.fc_value_void) { m_szTempBuilder.AppendFormat(" public {0}{1} {2}({3}){{}}\r\n", szStatic, ret_value.GetTypeName(false), method.Name, szCallParam); } else { string szRetCShaprName = ret_value.GetTypeName(true); m_szTempBuilder.AppendFormat(" public {0}{1} {2}({3}){{ return default({4}); }}\r\n", szStatic, ret_value.GetTypeName(false), method.Name, szCallParam, szRetCShaprName); } }