void GenerateCsCode(CodeStringBuilder stbuilder) { CodeTypeDeclaration orgDecl = this.OriginalDecl; CodeTypeDeclaration implTypeDecl = this.ImplTypeDecl; CodeGenUtils.AddComments(orgDecl, implTypeDecl); CsCallToNativeCodeGen callToNativeCs = new CsCallToNativeCodeGen(); callToNativeCs.GenerateCsCode(this, orgDecl, implTypeDecl, true, staticMethods, stbuilder, ss => { if (cpp_callToDotNetMets != null) { CsStructModuleCodeGen structModuleCodeGen = new CsStructModuleCodeGen(); structModuleCodeGen.GenerateCsStructClass(orgDecl, cpp_callToDotNetMets, ss, true); } }); //-------------------------------------------------------- }
public override void GenerateCode(CefCodeGenOutput output) { _cppHeaderExportFuncAuto = output._cppHeaderExportFuncAuto; _cppHeaderInternalForExportFuncAuto = output._cppHeaderInternalForExportFuncAuto; //cpp CodeTypeDeclaration orgDecl = this.OriginalDecl; CodeTypeDeclaration implTypeDecl = this.ImplTypeDecl; CodeStringBuilder totalTypeMethod = new CodeStringBuilder(); if (implTypeDecl.Name.Contains("CppToC")) { _typePlan = orgDecl.TypePlan; } else { _typePlan = implTypeDecl.TypePlan; } //----------------------------------------------------------------------- List <MethodPlan> callToDotNetMets = new List <MethodPlan>(); CodeStringBuilder const_methodNames = new CodeStringBuilder(); int maxPar = 0; int j = _typePlan.methods.Count; for (int i = 0; i < j; ++i) { MethodPlan metTx = _typePlan.methods[i]; metTx.CppMethodSwitchCaseName = orgDecl.Name + "_" + metTx.Name + "_" + (i + 1); //----------------- CodeMethodDeclaration codeMethodDecl = metTx.metDecl; if (codeMethodDecl.IsAbstract || codeMethodDecl.IsVirtual) { callToDotNetMets.Add(metTx); } //----------------- if (metTx.pars.Count > maxPar) { maxPar = metTx.pars.Count; } const_methodNames.AppendLine("const int " + metTx.CppMethodSwitchCaseName + "=" + (i + 1) + ";"); } totalTypeMethod.AppendLine(const_methodNames.ToString()); //----------------------------------------------------------------------- if (callToDotNetMets.Count > 0) { GenerateCppImplNamespace(orgDecl, callToDotNetMets, output._cppCode); } //----------------------------------------------------------------------- //C# part CsStructModuleCodeGen structModuleCodeGen = new CsStructModuleCodeGen(); if (callToDotNetMets.Count > 0) { structModuleCodeGen.GenerateCsStructClass(orgDecl, callToDotNetMets, output._csCode, false); } //back to cpp again... CppToCsMethodArgsClassGen cppMetArgClassGen = new CppToCsMethodArgsClassGen(); //------------------------------------------------------------------ CodeStringBuilder cppArgClassStBuilder = new CodeStringBuilder(); cppArgClassStBuilder.AppendLine("namespace " + orgDecl.Name + "Ext{"); for (int i = 0; i < j; ++i) { MethodPlan met = _typePlan.methods[i]; cppMetArgClassGen.GenerateCppMethodArgsClass(met, cppArgClassStBuilder); } cppArgClassStBuilder.AppendLine("}"); _cppHeaderExportFuncAuto.Append(cppArgClassStBuilder.ToString()); //------------------------------------------------------------------ }