Call the main function of my DLL

0

The first thing I do is include the dll. The class will be called equally that the one of my program I do not know if this supposes a problem. What I want once added is to call the function of my dll, the class of the dll will be as follows:

class Program
    {
        static Pool _pool = null;
        static Work _work = null;
        static uint _nonce = 0;
        static long _maxAgeTicks = 20000 * TimeSpan.TicksPerMillisecond;
        static uint _batchSize = 100000;

        static void Main(string[] args)
        {
            while (true)
            {
                try
                {
                    _pool = SelectPool();
                    _work = GetWork();
                    while (true)
                    {
                        if (_work == null || _work.Age > _maxAgeTicks)
                            _work = GetWork();

                        if (_work.FindShare(ref _nonce, _batchSize))
                        {
                            SendShare(_work.Current);
                            _work = null;
                        }
                        else
                            PrintCurrentState();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine();
                    Console.Write("ERROR: ");
                    Console.WriteLine(e.Message);
                }
                Console.WriteLine();
                Console.Write("Hit 'Enter' to try again...");
                Console.ReadLine();
            }
        }


        private static void ClearConsole()
        {
            Console.Clear();
            Console.WriteLine("*****************************");
            Console.WriteLine("*** Minimal Bitcoin Miner ***");
            Console.WriteLine("*****************************");
            Console.WriteLine();
        }

        private static Pool SelectPool()
        {
            ClearConsole();
            Print("Chose a Mining Pool 'user:password@url:port' or leave empty to skip.");
            Console.Write("Select Pool: ");
            string login = ReadLineDefault("lithander_2:[email protected]:8332");
            return new Pool(login);
        }

        private static Work GetWork()
        {
            ClearConsole();
            Print("Requesting Work from Pool...");
            Print("Server URL: " + _pool.Url.ToString());
            Print("User: " + _pool.User);
            Print("Password: " + _pool.Password);
            return _pool.GetWork();
        }

        private static void SendShare(byte[] share)
        {
            ClearConsole();
            Print("*** Found Valid Share ***");
            Print("Share: " + Utils.ToString(_work.Current));
            Print("Nonce: " + Utils.ToString(_nonce));
            Print("Hash: " + Utils.ToString(_work.Hash));
            Print("Sending Share to Pool...");
            if (_pool.SendShare(share))
                Print("Server accepted the Share!");
            else
                Print("Server declined the Share!");

            Console.Write("Hit 'Enter' to continue...");
            Console.ReadLine();
        }

        private static DateTime _lastPrint = DateTime.Now;
        private static void PrintCurrentState()
        {
            ClearConsole();
            Print("Data: " + Utils.ToString(_work.Data));
            string current = Utils.ToString(_nonce);
            string max = Utils.ToString(uint.MaxValue);
            double progress = ((double)_nonce / uint.MaxValue) * 100;
            Print("Nonce: " + current + "/" + max + " " + progress.ToString("F2") + "%");
            Print("Hash: " + Utils.ToString(_work.Hash));
            TimeSpan span = DateTime.Now - _lastPrint;
            Print("Speed: " + (int)(((_batchSize) / 1000) / span.TotalSeconds) + "Kh/s"); 
            _lastPrint = DateTime.Now;
        }

        private static void Print(string msg)
        {
            Console.WriteLine(msg);
            Console.WriteLine();
        }

        private static string ReadLineDefault(string defaultValue)
        {
            //Allow Console.ReadLine with a default value
            string userInput = Console.ReadLine();
            Console.WriteLine();
            if (userInput == "")
                return defaultValue;
            else
                return userInput;
        }
    }

What I want is to be able to call the main function from my other project once this dll is added.

    
asked by Perl 09.11.2016 в 04:04
source

1 answer

0

To be able to do what you say correctly, you should encapsulate this functionality in a class library project, and then share that new library in this console application project and in the new one that you are trying to use. reference.

If you notice, the Main method of the Program class has no access modifier, that in C # by default takes the value of private, so it will never be visible outside of its class and will never be able to be called with Program.Main (new string []);

    
answered by 09.11.2016 / 09:33
source