i have a simple task: is it possible to write a Delphi DLL and put a .Net Assembly (with only one interface with 4 methods and one class implementing the interface) besides it and call it from the
그러나 작성자의 소스에서 직접 컴파일 된 dll을 만들려고하면이 dll이 작동하지 않습니다 (오류 127 쓰기)
모든 버전의 .NET이 설치되어 있습니다.
// код 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
В данной статье я представил различные методы взаимодействия между кодом, написанным на MQL5, и управляемым кодом на C#. Также я подготовил несколько примеров маршалинга структур MQL5 для C# и примеров вызова экспортированных функций DLL в скриптах на MQL5. Приведенные примеры могут служить основой для дальнейших исследований аспектов написания DLL в управляемом коде. Эта статья также открывает двери для использования в MetaTrader 5 множества библиотек, уже реализованных на C#.
В последнее время я не просто много, а очень много экспериментирую с кодом, подходами, написаниями каких-то тестовых сценариев и приложений. Результат, конечно, всегда разный, ну да не об этом сегодня пойдет речь. Постепенно начинаешь уставать от настройки стандартных проектов. Для проекта библиотек надо удалить класс, создаваемый там по...
RGiesecke가 곧 답변해 주길 바라며, 다음에서 추적할 수 있습니다.
http://stackoverflow.com/questions/4642548/how-to-use-a-net-assembly-in-delphi-without-registering-it-in-the-gac-or-com/5497058#5497058
*이 글을 작성해 주셔서 정말 감사합니다! 매우 잘 작성되어 있고 다양한 예제가 매우 유용합니다.
저에게 가장 큰 장애물은 변수 유형과 이를 앞뒤로 전달하는 방법을 알아내는 것이었습니다. (특히 배열과 문자열) 메타트레이더용 공유 C# 라이브러리가 있으면 좋을 것 같습니다. 더 많이 배우고 유용한 라이브러리를 구축하면 기여할 수 있는지 알아보겠습니다.
시행착오를 통해 배우는 대신 많은 시간을 절약할 수 있었습니다. 지식을 공유해 주셔서 감사합니다.
정말 감사합니다! :-)
안녕하세요
갑자기(?) 제 DLL 함수가 "'TestMe.dll'에서 '추가'를 찾을 수 없습니다"라는 오류 메시지를 반환하는 문제가 있습니다. 다음은 코드를 사용한 간단한 예제입니다:
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)
{
반환 왼쪽 + 오른쪽;
}
}
}
.mql 파일에서 사용:
#import "Testme.dll"
int Add(int left,int right);
#import
void OnStart()
{
//---
for(int i=0; i<3; i++)
{
Print(Add(i,666));
}
}
--> 'Testme.dll'에서 'Add'를 찾을 수 없습니다.
제가 놓친 DLL 호출 방법이 변경되었나요?
어떤 의견이라도 대단히 감사하겠습니다.
Thomas
안녕
나는 또한 갑자기 문제가 생겼습니다 (처음에는 작동했지만 ...), 샘플 dll을 컴파일 할 때 다음과 같은 문제가 발생했습니다.
'C:\사용자\내부228\앱데이터\로컬\템프\tmpAFBE\UELTest.x86.il'을 DLL로 조립 --> 'C:\사용자\내부228\문서\비주얼 스튜디오 2010\프로젝트\UnmanagedLibTest\UELTest\bin\Debug\x86\UELTest.dll'
소스 파일은 유니코드입니다.
***** 실패 *****
UELTest
제가 놓친 것이 있나요?
윈도우 7; 비주얼스튜디오 2010;
의견을 주시면 감사하겠습니다.
Risan
**업데이트** 고마워요!
안녕하세요,
C# Express 2010에서 dll을 작성하기 위해 절차를 완전히 따랐습니다. 템플릿이 작동하지 않아 새 프로젝트에 dll 파일을 수동으로 추가했고 모든 것이 잘 컴파일되었습니다 (여기서 뭔가 잘못했을 수도 있습니다).
작동하는지 테스트하기 위해 간단한 함수 두 개를 작성했고 Metatrader 4에서 테스트 중입니다. 다음과 같은 오류가 발생합니다:
2011.10.29 20:13:37 2000.01.03 00:00 Expert_NN_1_1 USDJPY,H1: dll 'NN 1 DLL.dll'에서 'sum' 함수를 호출할 수 없습니다(오류 127).
문제가 무엇인지 아십니까? DLL이 내 MT4에로드되어 있지만 함수를 호출하고 싶지 않습니다. MT4에서 관리되는 dll을 호출하려고 할 때이 문제가 나타나는 것을 발견했지만이 문서에 설명 된 절차가 문제를 해결해야하는 것으로 예상됩니까?
어떤 도움을 주시면 감사하겠습니다.
고마워요!
안녕하세요,
잘 작성된 기사에 대해 감사의 말씀을 전하고 싶습니다.
로버트 기세케에 대한 사이트 세부 정보는 매우 귀중했습니다.
많은 것을 배웠습니다. VB.NET을 선호할 때 다른 C++ 래퍼를 작성할 필요가 없다는 것은 멋진 일입니다.
감사합니다.
Cheers,
Gordon
안녕하세요,
나는 같은 문제가 있습니다.... 내가 장식하는 방법은 mt5에서 찾을 수 없습니다 !!!
pls 도움말! (나는 vs2010과 템플릿을 사용하고 있습니다)
게시된 문서 관리되지 않는 코드를 내보내서 MQL5에서 C#의 세계를 여는 방법:
저자: investeo
기사에서 https://www.mql5.com/ko/articles/249 작성자의 컴파일 된 dll은 mt4 및 mt5에서 올바르게 작동합니다!
그러나 작성자의 소스에서 직접 컴파일 된 dll을 만들려고하면이 dll이 작동하지 않습니다 (오류 127 쓰기)
모든 버전의 .NET이 설치되어 있습니다.
// код 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));
}
//+------------------------------------------------------------------+
그리고 참여하기 위해 템플릿을 만드는 방법?
템플릿이 c-sharp에 삽입되는 위치와 방법을 아는 사람, 그 이유는 분명히 이것
그리고 템플릿을 사용하는 방법?
http://softblog.violet-tape.ru/2010/05/06/visual-studio-templates/
하단에 VS2010의 경우
그리고 맨 아래에 유용한 정보가 있습니다.