Автор Тема: Экспорт функций из Net dll | C# DLLExport | .NET Framework в Metatrader  (Прочитано 19963 раз)

Оффлайн Jonxxx

  • Administrator
  • *****
  • Topic Author
  • Сообщений: 1951
  • Вес голоса: 13
  • Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!
  • Уважение: +6
    • jonxxx.me
    • Репутация: 1337


Всю инфу перенес на свой сайт, можно почитать там. Плюс там есть возможность задавать вопросы без всяких регистраций.
http://jonxxx.me/13-metatrader/15-eksport-funktsij-iz-net-dll-c-dllexport-net-framework-v-metatrader
http://jonxxx.me/13-metatrader/16-obmen-dannymi-mezhdu-dll-na-c-i-metatrader-4
http://jonxxx.me/13-metatrader/23-poluchenie-stroki-iz-dll-c-v-metatrader-4

Оффлайн Baronardi

  • Новичок
  • *
  • Сообщений: 13
  • Вес голоса: 1
  • Baronardi has no influence.
  • Уважение: 0
    • Репутация: 113
У меня почему то не хочет компилироваться код
using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
   public class Class1
   {
      [System.Reflection.Obfuscation(Feature = "DllExport")]
      public static void Test(int i)
      {
         System.Windows.Forms.MessageBox.Show(i.ToString());
      }
   }
}


пишет:
 Имя типа или пространство имен "Windows" отсутствует в пространстве имен "System" (пропущена ссылка на сборку?)

подскажите пожалуйста мне такому нубу, что делать и кто виноват))

Оффлайн Jonxxx

  • Administrator
  • *****
  • Topic Author
  • Сообщений: 1951
  • Вес голоса: 13
  • Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!
  • Уважение: +6
    • jonxxx.me
    • Репутация: 1337
Baronardi, кликаете правой кнопкой мыши на строке Ссылки в проекте. Выбираете добавить ссылку. Откроется окно, там выбираете вкладку .Net. Там будет такой большой список, находите System.Windows.Forms, выделяете и жмите Ок.
По умолчанию этот неймспейс не подключен в проекте Dll.

Оффлайн Baronardi

  • Новичок
  • *
  • Сообщений: 13
  • Вес голоса: 1
  • Baronardi has no influence.
  • Уважение: 0
    • Репутация: 113
jonxxx Спасибо
Но терь новая проблема выдает ошибку при компилировании
выход из команды "C:\Program ....\ExportDll.exe"
"C:\Users....\Relese\Test.dll"" с кодом 9009

Мда короче пошел я дальше пока учить учебники по программированию
Но тема очень интересна, спасибо что затронули ее.
Этот вопрос очень интересен, но нигде не нашел более подробного и простого изложения.

Оффлайн Jonxxx

  • Administrator
  • *****
  • Topic Author
  • Сообщений: 1951
  • Вес голоса: 13
  • Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!
  • Уважение: +6
    • jonxxx.me
    • Репутация: 1337
Baronardi, а если строку из события построения убрать, то без ошибок компилируется?
И смотрите, чтобы строка такая же была, как и у меня, кавычки также расставлены.

Оффлайн Jonxxx

  • Administrator
  • *****
  • Topic Author
  • Сообщений: 1951
  • Вес голоса: 13
  • Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!
  • Уважение: +6
    • jonxxx.me
    • Репутация: 1337
Этот вопрос очень интересен, но нигде не нашел более подробного и простого изложения.
У такого способа есть ряд минусов. Это невозможность использовать стронг нейм и если будете делать на продажу, то надо будет длл защищать. Единственная защита в Net, это обфускация. Вот тут и появится проблема, когда обфускатор будет убивать таблицу экспорта. Например от 9rays гарантированно это делает.

Еще насчет минусов использования длл в мт4 сразу предупрежу:
*не запустить отладку. Раньше она запускалась, но потом метаквоты решили защитить терминал с помощью Themida и все, у меня точно не запускается. Кто-то старые билды юзает. Без отладки очень тяжело ошибки искать, если проект массивный.
*после загрузки длл терминал ее блокирует от перезаписи. Проще говоря не выгружает. После каждой правки перед пересборкой надо будет терминал закрывать.

Оффлайн Baronardi

  • Новичок
  • *
  • Сообщений: 13
  • Вес голоса: 1
  • Baronardi has no influence.
  • Уважение: 0
    • Репутация: 113

а если строку из события построения убрать, то без ошибок компилируется?

Вроде разобрался я просто компилировал F5 а не F6
Нуб одним словом))) *CRAZY*


если будете делать на продажу, то надо будет длл защищать.

На продажу пока не планирую, и думаю не скоро озадачусь продажей своих прог

Оффлайн Jonxxx

  • Administrator
  • *****
  • Topic Author
  • Сообщений: 1951
  • Вес голоса: 13
  • Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!
  • Уважение: +6
    • jonxxx.me
    • Репутация: 1337
Не без строки тоже самое выдает, кавычки точно такие же. Я уже и в разные папки переставлял ExporDll, но проблем та же
Ну дак если строки в окне событий после построения нет, то ExporDll тут вообще не причем. Происходит обычная компиляция длл в студии. Если ошибки, то код надо смотреть.

Оффлайн Baronardi

  • Новичок
  • *
  • Сообщений: 13
  • Вес голоса: 1
  • Baronardi has no influence.
  • Уважение: 0
    • Репутация: 113
короче я решил пойти другим путем
Я решил сначала с МТ4 записать котировки в файл, а потом из него прочитать уже в моей проге
Тут http://forum.masterforex-v.org/index.php?showtopic=15394  рассказывается как можно из МТ4 загнать котировку в txt
А вот как из файла к себе загнать котировку ниже выкладываю код

  // Метод разбивает полученную инфу по переменным
               public void RaspredPoPer(string line)
              {
                  string[] fiends = line.Split('\n');
                 
                  Bid1 = fiends[0];
                  Ask1 = fiends[1];
                  Bid2 = fiends[2];
                  Ask2 = fiends[3];
                  Bid3 = fiends[4];
                  Ask3 = fiends[5];
                  Bid4 = fiends[6];
                  Ask4 = fiends[7];


                 


              }


               public void Pognali()
    {
        // tFile.Text - textBox  в котором забит путь к файлу
        // у меня он такой C:\\Program Files\\MetaTrader Forex-Metal\\experts\\files\\BidAsk.txt   
        StreamReader d = new StreamReader(tFile.Text);
       
        string TextFile = d.ReadToEnd();           // Забиваем в TextFile все котировки

        RaspredPoPer(TextFile);             // Разбиваем по переменным
// tb и ta  это текстбоксы
        tb1.Text = Bid1;
        ta1.Text = Ask1;
        tb2.Text = Bid2;
        ta2.Text = Ask2;
        tb3.Text = Bid3;
        ta3.Text = Ask3;
        tb4.Text = Bid4;
        ta4.Text = Ask4;
        d = null;
        TextFile = "";
       
         
    }
Дальше делаю кнопку которая вызывает метод Pognali() и в своих окнах я вижу котировку


Но дальше я столкнулся с такой проблемой при повторном нажатии на кнопку ничего не происходит
Пытался обнулять все переменные, включая инфу о местонахождении файла, ничего не помогало.
Единственный способ получить новую котировку это остановить отладку и запустить заново

Че делать в ступоре пока сижу

Оффлайн Jonxxx

  • Administrator
  • *****
  • Topic Author
  • Сообщений: 1951
  • Вес голоса: 13
  • Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!Jonxxx is awe-inspiring!
  • Уважение: +6
    • jonxxx.me
    • Репутация: 1337
Baronardi, а котировки в txt-файле нормально обновляются?

Цитировать
d = null;
Достаточно d.Close(); вызвать