Exemple #1
0
        public static EocDll Translate(ProjectConverter P, DllDeclareInfo rawInfo)
        {
            var libraryName = rawInfo.LibraryName;
            var entryPoint  = rawInfo.EntryPoint;

            if (string.IsNullOrEmpty(entryPoint))
            {
                entryPoint = P.IdToNameMap.GetUserDefinedName(rawInfo.Id);
            }
            var name = P.GetUserDefinedName_SimpleCppName(rawInfo.Id);
            var info = new EocCmdInfo()
            {
                ReturnDataType = rawInfo.ReturnDataType == 0 ? null : EocDataTypes.Translate(P, rawInfo.ReturnDataType),
                CppName        = $"{P.DllNamespace}::{name}",
                Parameters     = rawInfo.Parameters.Select((x) =>
                {
                    var dataType = EocDataTypes.Translate(P, x.DataType, x.ArrayParameter);
                    return(new EocParameterInfo()
                    {
                        ByRef = x.ByRef || x.ArrayParameter || !EocDataTypes.IsValueType(dataType),
                        Optional = false,
                        VarArgs = false,
                        DataType = dataType,
                        CppName = P.GetUserDefinedName_SimpleCppName(x.Id)
                    });
                }).ToList()
            };

            return(new EocDll(P, name, info, libraryName, entryPoint));
        }
 public EocDllExport(ProjectConverter p, string name, EocCmdInfo info, string exportId)
 {
     P        = p ?? throw new ArgumentNullException(nameof(p));
     Name     = name ?? throw new ArgumentNullException(nameof(name));
     Info     = info ?? throw new ArgumentNullException(nameof(info));
     ExportId = exportId ?? Name;
 }
Exemple #3
0
        public EocDll(ProjectConverter p, string name, EocCmdInfo info, string libraryName, string entryPoint)
        {
            P    = p ?? throw new ArgumentNullException(nameof(p));
            Name = name ?? throw new ArgumentNullException(nameof(name));

            Info        = info ?? throw new ArgumentNullException(nameof(info));
            LibraryName = libraryName ?? throw new ArgumentNullException(nameof(libraryName));
            EntryPoint  = entryPoint ?? throw new ArgumentNullException(nameof(EntryPoint));
        }
Exemple #4
0
        internal void WriteMethodHeader(CodeWriter writer, EocCmdInfo eocCmdInfo, string name, bool isVirtual, string className = null, bool writeDefaultValue = true)
        {
            var paramName = GetParamNameFromInfo(eocCmdInfo.Parameters);

            writer.NewLine();
            if (isVirtual)
            {
                writer.Write("virtual ");
            }

            var numOfOptionalAtEnd = 0;

            for (int i = eocCmdInfo.Parameters.Count - 1; i >= 0; i--)
            {
                if (eocCmdInfo.Parameters[i].Optional)
                {
                    numOfOptionalAtEnd++;
                }
                else
                {
                    break;
                }
            }
            var startOfOptionalAtEnd = eocCmdInfo.Parameters.Count - numOfOptionalAtEnd;

            writer.Write(eocCmdInfo.ReturnDataType == null ? "void" : eocCmdInfo.ReturnDataType.ToString());
            writer.Write(" __stdcall ");
            if (className != null)
            {
                writer.Write(className);
                writer.Write("::");
            }
            writer.Write(name);
            writer.Write("(");
            for (int i = 0; i < eocCmdInfo.Parameters.Count; i++)
            {
                if (i != 0)
                {
                    writer.Write(", ");
                }
                writer.Write(GetParameterTypeString(eocCmdInfo.Parameters[i]));
                writer.Write(" ");
                writer.Write(paramName[i]);
                if (writeDefaultValue && i >= startOfOptionalAtEnd)
                {
                    writer.Write(" = std::nullopt");
                }
            }
            writer.Write(")");
        }
Exemple #5
0
 internal void DefineMethod(CodeWriter writer, EocCmdInfo eocCmdInfo, string name, bool isVirtual)
 {
     WriteMethodHeader(writer, eocCmdInfo, name, isVirtual, null, true);
     writer.Write(";");
 }
Exemple #6
0
 public void AnalyzeDependencies(AdjacencyGraph <string, IEdge <string> > graph, EocCmdInfo info, string refId = null)
 {
     if (info == null)
     {
         return;
     }
     refId = refId ?? info.CppName;
     graph.AddVertex(refId);
     AnalyzeDependencies(graph, refId, info.ReturnDataType);
     foreach (var x in info.Parameters)
     {
         var varRefId = $"{refId}|{x.Name}";
         graph.AddVerticesAndEdge(new Edge <string>(refId, varRefId));
         AnalyzeDependencies(graph, varRefId, x.DataType);
     }
 }