Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Правильная компиляция dll на С# для использования в qml4

    Здравствуйте!
    пытаюсь скомпилировать dll c#
    Взял за основу проект из инета
    Код:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Runtime.InteropServices;
    using RGiesecke.DllExport;
    
    namespace MqlSqlDemo
    {
        public static class MqlSqlDemo
        {
            private static SqlConnection conn = null;
            private static SqlCommand com = null;
            private static string sMessage = string.Empty;
    
            public const int iResSuccess = 0;
            public const int iResError = 1;
    
            [DllExport("CreateConnection", CallingConvention = CallingConvention.StdCall)]
            public static int CreateConnection(
                [MarshalAs(UnmanagedType.LPWStr)] string sConnStr)
            {
                // Всё прошло хорошо, подключение открыто:
                return iResSuccess;
            }
    ... 
    //дальше какой-то код который при удалении почему то не дает компилировать этот проект но с удалением буду разбираться позже
    Нажмите на изображение для увеличения.

Название:	123.png
Просмотров:	1
Размер:	120.2 Кб
ID:	29950219
    На рисунке можно поглядеть настройки и ответ о компиляции
    Дальше я копирую файл в прямо в папку с экспертами (ногами не бейте, я в курсе, что так настоящие герои не делают, мне только надо с подключением разобраться, потом я уже красоту наведу).
    Сторона MQL
    MQL код:
    //+------------------------------------------------------------------+
    //| 1expert.mq4 |
    //| Copyright 2020, MetaQuotes Software Corp. |
    //| https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2020, MetaQuotes Software Corp."
    #property link "https://www.mql5.com"
    #property version "1.00"
    #property strict
    // Description of the imported functions.
    #import "MqlSqlDemo.dll"

    // Function for opening a connection:
    int CreateConnection(string sConnStr);
    // End of import:
    #import
    //+------------------------------------------------------------------+
    //| Expert initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    //---
    Print("connection!!!!!!!!!!!!!!!");
    // Try to open a connection:
    if (CreateConnection("hgfffghj") != 1)
    {
    // Failed to establish the connection.
    // Print the message and exit:
    Print("Error when opening connection. ");
    return(INIT_FAILED);
    }
    Print("Connected to database.");

    //---
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    //---

    }
    //+------------------------------------------------------------------+
    //| Expert tick function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    //---

    }
    //+------------------------------------------------------------------+

    Нажмите на изображение для увеличения.

Название:	Скриншот 15-07-2020 222643.png
Просмотров:	1
Размер:	12.2 Кб
ID:	29950223
    Я так понимаю, что где-то недокомпилировал... подскажите пожалуйста, что не так.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Читаем, как вариант, тут и тут. Только вдумчиво...
     

    Комментарий

    • #3 Свернуть

      Так что вариант предложенный в статье на qml4 не прокатит?
       
      Последний раз редактировалось cherik1; 16.07.2020, 22:14.

      Комментарий

      • #4 Свернуть

        Так что, он не видит RGiesecke.DllExport? куда его нужно поместить? в system32 или в папку скрипта?
        Я честно прочитал вашу статью 2 раза, конечно на данный момент изучать с++ и разные методы компиляции не планирую, да и не нужно это для моих изысканий, поэтому часть про виды компиляции честно половину не понял, ну и понятия с терминами там какие-то специфические...
        Но ваш код выдает ту же ошибку... я так понимаю qml4 тупо не видит RGiesecke.DllExport... но как эту ошибку исправить?
           

        Комментарий

        • #5 Свернуть

          Сообщение от cherik1 Посмотреть сообщение
          Я честно прочитал вашу статью 2 раза ... честно половину не понял
          Значит таки не читали. Dll от .NET без танцев с бубном в MQL(эм-кью-эль, а не qml, как вы пишите ) работать не будет. А вот какие танцы и с каким бубном в статье, как раз и описано.

          Сообщение от cherik1 Посмотреть сообщение
          как эту ошибку исправить?
          В статье все описано до мелочей. Плюс кучу ссылок на нужную литературу там дали. И даже исходники примеров рабочие там приведены. Или вам надо, чтобы эту статью со всеми потрохами вам тут персонально пересказали?
             

          Комментарий

          • #6 Свернуть

            Да действительно, я не понимаю начиная со схемы взаимодействия особенно, не понимаю блоки с С++ кодами, если по честному я и говорил, что сейчас сложно изучать, и если бы хорошо знать С++, то ни какие С# по сути будут не нужны...
            Думаю, что эта статья написана для, программистов уже знающих С++... я же даже не знаю его синтаксис.
            Я знаю и понимаю только С#... сейчас вопрос в том захотите ли вы мне помогать в разборе непонятных мне частей этой статьи...
            Я вообще, извините, не понимаю зачем "стоит упомянуть все известные методы, возможно кто-то предпочтет использовать другой способ, отличный от того, который использую" (вот лично меня это только запутывает тут бы один понять) и какой ТОТ самый способ, который использует автор статьи...
               

            Комментарий

            • #7 Свернуть

              Сообщение от cherik1 Посмотреть сообщение
              Я вообще, извините, не понимаю зачем "стоит упомянуть все известные методы, возможно кто-то предпочтет использовать другой способ, отличный от того, который использую" (вот лично меня это только запутывает тут бы один понять)
              Как раз именно для того, чтоб иметь представление о том, что и как в этом вашем .NET работает, как его заставить делать то, что вам необходимо и почему автор статьи выбрал именно то, что выбрал.
              Сообщение от cherik1 Посмотреть сообщение
              и какой ТОТ самый способ, который использует автор статьи...
              Ну я же вам говорил, читайте вдумчиво, а не по диагонали. И раз уж вы не узрели "ТОТ самый способ", позвольте ткнуть вас носом... Автор там, черным по белому, четко и ясно, пишет следующее...



              А дальше идут примеры, причем на чистейшем шарпее... Про который вы говорите...

              Сообщение от cherik1 Посмотреть сообщение
              Я знаю и понимаю только С#
              И на MQL. Или по вашему и в этих примерах синтаксис не С#?

              Сообщение от cherik1 Посмотреть сообщение
              сейчас вопрос в том захотите ли вы мне помогать в разборе непонятных мне частей этой статьи...
              Т.е. я по вашему должен написать за вас и отладить для вас вашу хотелку под видом "разбора непонятных вам частей"... Вы потом с чувством выполненого долга честно и бездумно скопипастите все к себе, оно у вас, по одной из сотен причин, не заработает и что дальше? Нет уж... Все па этого кардебалета вам придется осваивать самостоятельно, терпеливо, вдумчиво и возможно, судя по вашим постам, долго. Я вам дал ссылку на статью. Автор статьи дал вам удочку, основательно разжевав все подводные камни и выложив готовые рабочие примеры. Вам осталось только рыбку поймать.
               

              Комментарий

              • #8 Свернуть

                >А дальше идут примеры, причем на чистейшем шарпее... Про который вы говорите...
                ну как же на читейшем, когда нужно писать обертку на С++?
                Я же повторил весь пример, уже даже для чистоты эксперимента 5 версию установил...
                она все равно выдает
                2020.07.19 19:09:11.756 my1script (USDRUR_i,H1) Cannot call 'Add', 'Testme.dll' is not loaded
                а что за обертку надо писать я вообще не понимаю как к ней подойти... короче всем спасибо...за участие...
                   

                Комментарий

                • #9 Свернуть

                  Вы потом с чувством выполненного долга честно и бездумно скопипастите все к себе, оно у вас, по одной из сотен причин, не заработает и что дальше?
                  Вы понимаете, что когда что-то работает, из этого можно сделать что-то более сложное, так как ты видишь что оно работает и тебе проще от этого отталкиваться. А когда не работает даже пример из статьи.
                  Так все-таки я не понимаю нужно ли в "4.1. Пример 1. Сложение двух переменных типа integer, double или float в функции DLL и возврат результата в MetaTrader 5" что-то еще кроме dll такого кода на mql5?
                  Если вы говорите что там примеры на чистейшем шарпе, то где тогда эти танцы с бубнами.
                  Все равно в статье написано:
                  Для тестирования работы прилагаемых программ разместите файлы в следующих каталогах:
                  MQL5\Libraries\testme.dll
                  MQL5\Scripts\unmanagedexportsdllexample1.mq5
                  Уж с этим то я могу справиться я думаю... но он все равно не дает мне Cannot call 'Add', 'Testme.dll' is not loaded
                     
                  Последний раз редактировалось cherik1; 19.07.2020, 22:08.

                  Комментарий

                  • #10 Свернуть

                    Сообщение от cherik1 Посмотреть сообщение
                    Здравствуйте!
                    Привет! Если нужно для MQL5, то все просто. Ссылка
                    Нажмите на изображение для увеличения.

Название:	Screenshot_123.png
Просмотров:	1
Размер:	92.0 Кб
ID:	28595989
                    Вот пример для передачи "туда-обратно" строки и массива чисел.Нажмите на изображение для увеличения.

Название:	Screenshot_122.png
Просмотров:	1
Размер:	44.7 Кб
ID:	28595987
                    Чтобы не делать лишних "телодвижений" можно сразу прописать путь куда VS будет генерировать исполняемый файл.
                    Нажмите на изображение для увеличения.

Название:	Screenshot_121.png
Просмотров:	1
Размер:	62.8 Кб
ID:	28595988
                    Ну и сами вызовы на MQL.
                    MQL код:

                    #property copyright "Copyright 2019, MetaQuotes Software Corp."
                    #property link "https://www.mql5.com"
                    #property version "1.00"
                    #import "ClassLibrary1.dll"
                    //+------------------------------------------------------------------+
                    //| Script program start function |
                    //+------------------------------------------------------------------+
                    void OnStart()
                    {
                    Print(Класс::Метод("Привет!!!"));
                    int массив[5]; Класс::Метод(массив);
                    for(int i = 0; i < 5; i++) { Print(массив[i]); }
                    }
                    //+------------------------------------------------------------------+

                    Должно получиться так
                    Нажмите на изображение для увеличения.

Название:	Screenshot_124.png
Просмотров:	1
Размер:	127.1 Кб
ID:	28596000
                    а потом так.
                    Нажмите на изображение для увеличения.

Название:	Screenshot_125.png
Просмотров:	1
Размер:	135.8 Кб
ID:	28595999

                    Комментарий

                    • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                    • #11 Свернуть

                      Ну вот я только нашел пример с соккетами на пайтоне... собственно говоря мне c# нужно было для передачи в sql server данных...там бы я анализировал все в бесконечном цикле пайтоне и давал ответ в базу! От туда я хотел запросом выбирать и в зависимости от того что в базе открыть ордер... Но теперь то все это можно сделать через соккет
                       

                      Комментарий

                      Сейчас онлайн

                      working...
                      X