Discussão do artigo "Expondo código C# para MQL5 usando exportações não gerenciadas" - página 5

 
Pelo que entendi, o modelo RGiesecke UnmanagedExportLibrary usa comentários como // Código para analisar arquivos IL em alguns lugares. Os usuários do Windows que falam russo inserem lá comentários russos como // Size, e é por isso que o modelo dele não funciona. Simplesmente não há funções na DLL e é por isso que o erro 127 é lançado. É uma pena que, apenas por causa desse modelo, eu não queira alterar a linguagem da interface do Windows, embora ela funcione muito bem e pareça estar correta, pelo menos as DLLs são descarregadas. A Microsoft também é uma vassoura, você pode facilmente transferir dados do C++ para o C#, mas o contrário é um grande problema.
 

Estou em um Windows 8 64.

Eu o compilei com o vs2013.

No entanto, ele carrega, mas há uma chamada de função de importação não resolvida.

Como posso resolver isso?

2014.03.05 20:39:59.220 Chamada de função de importação não resolvida UnmanagedExportsDLLExample1 (XAUUSD,H1)

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) Não é possível encontrar 'Add' em '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)

Hi,

Estou recebendo erros semelhantes. Como você resolveu o problema?

2014.03.28 22:16:41.199 2014.03.25 23:59 chamada de função de importação não resolvida

2014.03.28 22:16:41.199 2014.03.25 23:59 Não é possível encontrar 'Set2DArray' em 'Testme.dll'

 
ANG3110:
Pelo que entendi, o modelo RGiesecke UnmanagedExportLibrary...

Esta mensagem foi deixada há mais de meio ano. Houve alguma alteração desde então????

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Alguém conseguiu fazer a função ReplaceString funcionar? Todas as funções estão funcionando, exceto essa.
 

Método um:

Tenho 64 win 7, vs2012 C#. Baixei o arquivo de modelo testme.zip do proprietário.

No meio do prompt, alguns erros (caminho errado, arquivos ausentes, etc. e assim por diante) foram resolvidos.

Mas, no final, ainda aparece o mesmo problema e lá em cima. Não sei se ele foi resolvido agora? Qual é o método para resolver.



Método dois:

NuGet instalou o pacote RGiesecke.

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

A versão mais recente, de 201311, solicita

Erro 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error : syntax error at token '{ ' in: {
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)
[Excluído]  

Você pode usar o C++ stripper com a ajuda do IJW e, em seguida, mesclar tudo em uma única DLL puramente por meio do compilador - linker, perversões com o modelo descrito no artigo não são necessárias, descritas brevemente aqui - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.

Bem, e o método descrito com o modelo RGiesecke - é um hack e, mais cedo ou mais tarde, deixa de funcionar, e eu, a propósito, também não funcionei...

Mas se alguém ainda quiser brincar com o método IL descrito no artigo, há mais uma bicicleta, mas ela também não funciona - 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...
 

Olá,

Alguém conseguiu enviar uma estrutura com variáveis do tipo string para a dll?

Consegui enviar int, double, float, mas para variáveis de string recebo este erro:

Access violation read to 0x0000007B

Aqui está minha estrutura C#:

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            public string broker;
// public String server;
            public int account;
// público 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;
        };

E aqui está a estrutura mql4:

   struct accInfo
   {
      string   broker;
// string server;
      int      account;
// string user;
      
      double   balance;
      double   credit;
// string currency;
      int      leverage;
      int      stopout;
      int      stopoutmode;
      float    commission;
      int      lotsize;
      float    minlot;
      float    lotstep;
      float    maxlot;
      float    gmtOffset;
      
// par de strings;
      int      digits;
      int      point;
      int      tradeAllowed;
      int      swaptype;
      float    swapbuy;
      float    swapsell;
      int      stoplevel;
   };

Tentei transferir a variável de cadeia de caracteres dentro da estrutura, mas o MT4 trava totalmente, sem erro, apenas trava e trava no Windows.

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

Obrigado.

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:

Sim, em algum momento escreveremos um novo artigo sobre o uso de DLLs. Muitas coisas interessantes foram adicionadas lá.

Enquanto isso, você pode usar os exemplos do artigo em discussão. Não há nada complicado lá.

E ... Quanto tempo devo esperar? Um ano, dois... ou 10?

Já se passaram 3 anos. De acordo com o artigo mencionado no início, não é possível importar métodos da dll. Onde estão os exemplos?

 

Muito obrigado por este artigo. Usei as ideias aqui para criar esta biblioteca MQL de código aberto para C#.

https://github.com/jseparovic/MQL4CSharp

Ela ainda está em desenvolvimento e não foi testada no momento, mas os testes iniciais mostram que a ideia funciona.

É muito básica na forma como envia comandos do C#, usando um Thread para o código C# ser executado e getters/setters para comunicação. O MQL procura por comandos em espera a cada milissegundo, enquanto o código C# pode bloquear até que o resultado seja gravado.

Dê uma olhada em https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs para ver um exemplo de como implementar uma estratégia em c#.

Obrigado,

Jason