Discussão do artigo "Expondo código C# para MQL5 usando exportações não gerenciadas" - página 2
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Espero que RGiesecke responda em breve, você pode acompanhar em
http://stackoverflow.com/questions/4642548/how-to-use-a-net-assembly-in-delphi-without-registering-it-in-the-gac-or-com/5497058#5497058
*Muito obrigado por escrever este artigo! Ele está muito bem escrito e os vários exemplos são extremamente úteis.
O grande obstáculo para mim foi descobrir os tipos de variáveis e como passá-las para frente e para trás. (Seria ótimo ver algumas bibliotecas C# compartilhadas para o Metatrader. Quando eu aprender mais e criar algumas bibliotecas úteis, verei se posso contribuir com elas.
Você me poupou muito tempo em vez de aprender por tentativa e erro. Obrigado por compartilhar seu conhecimento.
Agradeço muito! :-)
Hi
Estou com um problema em que, de repente (?), minha função DLL retorna a mensagem de erro "Cannot find 'Add' in 'TestMe.dll'". Este é um exemplo simples, usando seu código:
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace Testme
{
class Test
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}
Usando-o em um arquivo .mql:
#import "Testme.dll"
int Add(int left,int right);
#import
void OnStart()
{
//---
for(int i=0; i<3; i++)
{
Print(Add(i,666));
}
}
--> Não é possível encontrar 'Add' em 'Testme.dll'
Há alguma alteração na forma de chamar DLLs que eu não tenha percebido?
Qualquer opinião será muito apreciada
Thomas
Hi
Também tive um problema repentino (funcionou no início, mas ...), quando compilei a dll de amostra, obtive
Montagem de 'C:\Users\internal228\AppData\Local\Temp\tmpAFBE\UELTest.x86.il' em DLL --> 'C:\Users\internal228\Documents\Visual Studio 2010\Projects\UnmanagedLibTest\UELTest\bin\Debug\x86\UELTest.dll'
O arquivo de origem é UNICODE
***** FAILURE *****
UELTest
Perdi alguma coisa?
Windows 7; VisualStudio 2010;
Qualquer opinião é muito bem-vinda.
Risan
**ATUALIZAÇÃO** Resolvido, obrigado!
Olá,
Segui todo o procedimento para escrever uma dll no C# Express 2010. O modelo não funcionou, então adicionei manualmente os arquivos da dll em um novo projeto e tudo foi compilado corretamente (talvez eu tenha feito algo errado aqui).
Escrevi duas funções simples apenas para testar se funciona, e estou testando no Metatrader 4. Recebo o seguinte erro:
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)
A DLL está carregada no meu MT4, eu verifiquei, mas ela não quer chamar a função. Percebi que esse problema aparece ao tentar chamar uma dll gerenciada no MT4, mas o procedimento descrito neste artigo deve resolver o problema, certo?
Qualquer ajuda será bem-vinda
Obrigado!
Olá,
Gostaria apenas de transmitir minha gratidão por um artigo tão bem escrito.
Os detalhes do site de Robert Giesecke foram de grande valia.
Aprendi muito. Não precisar escrever outro wrapper C++ quando prefiro o VB.NET é muito legal.
Muito obrigado.
Obrigado,
Gordon
Hi,
Estou com o mesmo problema.... métodos que eu decoro não são encontrados no mt5!!!
Por favor, ajude-me (estou usando o vs2010 e o modelo).
Artigo publicado Como abrir o mundo do C# a partir da MQL5 exportando código não gerenciado:
Autor: investeo
no artigo https://www.mql5.com/pt/articles/249 A dll compilada do autor funciona corretamente no mt4 e no mt5!
mas quando tento criar minha própria dll compilada a partir da fonte do autor (no VisualStudio 2010), essa dll não funciona (escreve o erro 127)
todas as versões do .NET instaladas
// код C#
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace TEST
{
class TEST
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}
namespace RGiesecke.DllExport
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
partial class DllExportAttribute : Attribute
{
public DllExportAttribute()
{
}
public DllExportAttribute(string exportName)
: this(exportName, CallingConvention.StdCall)
{
}
public DllExportAttribute(string exportName, CallingConvention callingConvention)
{
ExportName = exportName;
CallingConvention = callingConvention;
}
public CallingConvention CallingConvention { get; set; }
public string ExportName { get; set; }
}
}
// код МТ4
//+------------------------------------------------------------------+
#import "TEST.dll"
int Add(int a,int b);
#import
void start()
{
Comment(Add(3,2));
}
//+------------------------------------------------------------------+
e como criar um modelo para se envolver?
Quem sabe onde e como os modelos são inseridos no c-sharp? Aparentemente, o motivo é apenas este
e como ativar o modelo?
http://softblog.violet-tape.ru/2010/05/06/visual-studio-templates/
na parte inferior para o VS2010.
e informações úteis na parte inferior.