Обсуждение статьи "Как открыть мир C# из MQL5 путем экспорта неуправляемого кода" - страница 5

 
На сколько я понял, шаблон RGiesecke UnmanagedExportLibrary, использует для парсинга IL файлов в некоторых местах опору на комментарии, типа // Code. Русскоязычные Windows-ы туда вставляют русские комментарии типа // Размер, и потому его шаблон не работает. В DLL-ке просто нету функций и потому вылетает ошибка 127. А жаль, ради только этого шаблона менять язык интерфейса Windows не хочется, хотя он работает довольно хорошо и вроде корректно, по крайней мере DLL-ки хоть выгружаются. Microsoft тоже веники, из C++ в C# можно легко передавать данные, а вот наоборот большая проблемма.  
 

Я работаю на 64-й версии win 8.

Я скомпилировал его с помощью vs2013.

Однако он загружается, но есть неразрешенный вызов функции импорта.

Как я могу решить эту проблему?

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) unresolved import function call

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) Cannot find 'Add' in 'Testme.dll'

 

2011.10.29 20:13:37    2000.01.03 00:00  Expert_NN_1_1 USDJPY,H1: cannot call function 'sum' from dll 'NN 1 DLL.dll' (error 127)

Привет,

Я получаю похожие ошибки. Как вы с ними разобрались?...

2014.03.28 22:16:41.199 2014.03.25 23:59 Неразрешенный вызов функции импорта

2014.03.28 22:16:41.199 2014.03.25 23:59 Cannot find 'Set2DArray' in 'Testme.dll'

 
ANG3110:
На сколько я понял, шаблон RGiesecke UnmanagedExportLibrary...  

 

Это сообщение оставлено более полугода назад. Что-нибудь изменилось с тех пор???

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Кто-нибудь смог заставить функцию ReplaceString работать? Все функции выполняют свою работу, кроме этой, есть идеи?
 

Способ первый:

У меня 64 win 7, vs2012 C#. Скачал файл шаблона testme.zip от владельца.

В середине подсказки несколько ошибок (неправильный путь, отсутствующие файлы и т.д. и т.п.), было решено.

Но в итоге все равно появляется и поднимается наверх та же проблема. Я не знаю, решена ли она сейчас? Каким методом решить.



Способ второй:

NuGet установил пакет RGiesecke.

https://www.nuget.org/packages/UnmanagedExports/1.2.6

Последняя версия от 201311 выдает

Error 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error: syntax error at token '{ ' в: {
dllTest



Unmanaged Exports (DllExport for .Net)
Unmanaged Exports (DllExport for .Net)
  • www.nuget.org
A set of compile-time libraries (nothing to deploy) and a build task that enable you to export functions from managed code to native applications. That means, you can create plugins in a managed language like C# or F# for native applications that only have a C-Api (like Notepad++). The nuget package is all you need. Just mark your methods with [DllExport] and build for x86, x64 or ia64. Hints: - You have to set your platform target to either x86, ia64 or x64. AnyCPU assemblies cannot export functions. - The export name defaults to the method name and the calling convention to stdcall. If that's all what you want, you can just use [DllExport] without parameters. - You cannot put your exports in generic types or export generic methods. (The CLR wouldn't know what type parameters to use)
[Удален]  

Можно использовать С++ враппер с помощью IJW, а потом мержить все в одну единственную DLL чисто средствами компилятора - линкера, извращения с шаблоном, описанные в статье не нужны, описал вкратце здесь - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file

Ну, а описанный метод с шаблоном RGiesecke - это хак и такое рано или поздно перестает работать, у меня, кстати, тоже не заработал ...

Но, если кому все же хочется поиграться с IL методом описанным в статье, то есть еще один велосипед, правда, также нерабочий - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool

Include managed C# DLL into unmanaged C++ DLL - all in one single file
Include managed C# DLL into unmanaged C++ DLL - all in one single file
  • stackoverflow.com
In comparison to the question above i need to combine DLLs so that final mixed DLL could export their functions to other unmanaged applications. For this i would like to compile them both as .netmodule and then combine them into one file with a linker so i have : 1) Libs - project with some library in C# - it does not have any dependencies...
 

Здравствуйте,

Кто-нибудь смог отправить в dll структуру со строковыми переменными внутри?

Я смог отправить int, double, float, но для строковых переменных я получаю эту ошибку:

Access violation read to 0x0000007B

Вот моя структура на C#:

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            public string broker;
// public String server;
            public int account;
// public String user;

            public double balance;
            public Double credit;
// public String currency;
            public int leverage;
            public int stopout;
            public int stopoutmode;
            public float commission;
            public int lotsize;
            public float minlot;
            public float lotstep;
            public float maxlot;
            public float gmtOffset;

// public String pair;
            public int digits;
            public int point;
            public int tradeAllowed;
            public int swaptype;
            public float swapbuy;
            public float swapsell;
            public int stoplevel;
        };

А вот структура mql4:

   struct accInfo
   {
      string   broker;
// строковый сервер;
      int      account;
// строка user;
      
      double   balance;
      double   credit;
// строка валюта;
      int      leverage;
      int      stopout;
      int      stopoutmode;
      float    commission;
      int      lotsize;
      float    minlot;
      float    lotstep;
      float    maxlot;
      float    gmtOffset;
      
// пара строк;
      int      digits;
      int      point;
      int      tradeAllowed;
      int      swaptype;
      float    swapbuy;
      float    swapsell;
      int      stoplevel;
   };

Я попытался передать строковую переменную внутри структуры, но MT4 полностью рушится, без ошибок, просто зависает и рушится в windows.

       [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            [MarshalAs(UnmanagedType.LPWStr)]
            public string broker;
...

Спасибо.

Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
  • www.mql5.com
I also provided several examples on how to marshal MQL5 structures against C# and how to invoke exported DLL functions in MQL5 scripts. - Page 2 - Category: articles, library comments
 
Renat Fatkhullin:

Да, через некоторое время напишем новую статью про использование DLL. Там очень много интересного добавлено.

А пока можете примеры из обсуждаемой статьи использовать. Там ничего сложного нет.

Ну и .. Сколько ещё ждать? Год, два... или 10?

 Уже 3 года прошло. По статье, указанной в самом начале не возможно импортировать методы из dll. Где примеры?

 

Большое спасибо за эту статью. Я использовал идеи, изложенные в ней, для создания этой открытой библиотеки MQL для C#.

https://github.com/jseparovic/MQL4CSharp

Она все еще находится в стадии разработки и на данный момент не протестирована, но первые тесты показывают, что идея работает.

Это очень простой способ отправки команд из C#, использующий Thread для выполнения кода C# и геттеры/сеттеры для взаимодействия. MQL опрашивает ожидающие команды каждую миллисекунду, а код на C# может блокироваться до тех пор, пока не будет записан результат.

Посмотрите на https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs пример реализации стратегии на c#.

Будьте здоровы,

Джейсон