Example #1
0
    int GenPinvokeTable(String[] args)
    {
        var modules = new Dictionary <string, string> ();

        foreach (var module in args[1].Split(','))
        {
            modules [module] = module;
        }

        args = args.Skip(2).ToArray();

#if NETFRAMEWORK
        var assemblies = new List <AssemblyDefinition> ();
        foreach (var fname in args)
        {
            assemblies.Add(AssemblyDefinition.ReadAssembly(fname));
        }

        var generator = new PInvokeTableGenerator();
        generator.Run(assemblies, modules);
#else
        var generator = new PInvokeTableGenerator();

        generator.OutputPath = Path.GetTempFileName();
        generator.GenPInvokeTable(modules.Keys.ToArray(), args.ToArray());

        Console.WriteLine(File.ReadAllText(generator.OutputPath));
#endif

        return(0);
    }
Example #2
0
    int GenInterpToNative(String[] args)
    {
        if (args.Length < 2)
        {
            Usage();
            return(1);
        }
        string outfileName = args [1];

        args = args.Skip(2).ToArray();

        var assemblies = new List <AssemblyDefinition> ();

        foreach (var fname in args)
        {
            assemblies.Add(AssemblyDefinition.ReadAssembly(fname));
        }

        List <Pinvoke>         pinvokes;
        List <PinvokeCallback> callbacks;

        PInvokeTableGenerator.CollectPInvokes(assemblies, out pinvokes, out callbacks);

        var gen = new InterpToNativeGenerator();

        foreach (var pinvoke in pinvokes)
        {
            gen.AddSignature(pinvoke.Method);
        }
        using (var w = File.CreateText(outfileName)) {
            gen.Emit(w);
        }
        return(0);
    }
Example #3
0
    private void ExecuteInternal()
    {
        var pinvoke = new PInvokeTableGenerator(Log);
        var icall   = new IcallTableGenerator(Log);

        IEnumerable <string> cookies = Enumerable.Concat(
            pinvoke.GenPInvokeTable(PInvokeModules, Assemblies !, PInvokeOutputPath !),
            icall.GenIcallTable(RuntimeIcallTableFile, Assemblies !, IcallOutputPath)
            );

        var m2n = new InterpToNativeGenerator(Log);

        m2n.Generate(cookies, InterpToNativeOutputPath !);

        FileWrites = IcallOutputPath != null
            ? new string[] { PInvokeOutputPath, IcallOutputPath, InterpToNativeOutputPath }
            : new string[] { PInvokeOutputPath, InterpToNativeOutputPath };
    }
Example #4
0
    int GenPinvokeTable(String[] args)
    {
        var modules = new Dictionary <string, string> ();

        foreach (var module in args[1].Split(','))
        {
            modules [module] = module;
        }

        args = args.Skip(2).ToArray();
        var assemblies = new List <AssemblyDefinition> ();

        foreach (var fname in args)
        {
            assemblies.Add(AssemblyDefinition.ReadAssembly(fname));
        }

        var generator = new PInvokeTableGenerator();

        generator.Run(assemblies, modules);

        return(0);
    }
Example #5
0
    int GenPinvokeTable(String[] args)
    {
        var modules = new Dictionary <string, string> ();

        foreach (var module in args[2].Split(','))
        {
            modules [module] = module;
        }

        var files = args.Skip(3).ToArray();

#if NETFRAMEWORK
        throw new NotSupportedException($"pinvoke generation is not supported for netstandard2.0");
#else
        var generator = new PInvokeTableGenerator();

        Console.WriteLine($"Generating to {args[1]}");

        generator.OutputPath = args[1];
        generator.GenPInvokeTable(modules.Keys.ToArray(), files.ToArray());
#endif

        return(0);
    }