이 오류는 중국어 시스템에서 발생하는데, UnmanageExports가 IL 파일을 생성할 때 일부 주석이 중국어로 생성되어 UnmanageExports가 제대로 작동하지 않기 때문입니다. 이 문제는 일본어 및 영어 운영 체제에서는 발생하지 않으며, 해결 방법이 있으므로 운영 체제를 영어로 변경할 수 있습니다.
그러나 이것은 너무 많은 문제가 될 것입니다. 여기에서 문제를 해결하기 위해 작은 여우를 꺼내야합니다!
다음 주소에서 Little Fox가 제공하는 관리되지 않는 내보내기 수정 프로그램을 다운로드하세요.
하지만 작성자의 소스에서 직접 컴파일된 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
나는 3 일과 3 박을 인터넷 검색과 실험에 보냈고, 일반적으로 예제는 VS2017에서 작동하며 MT4에서 .dll을 컴파일하고 실행할 수 있었지만 ..... 러시아어로 된 Win10에서는 실행할 수 없습니다.
Win7-64로 가상 머신을 설치했지만 영어로 된 VS2017의 영어 버전을 설치하고 C # 용 패키지 만 설치하고 RGiesecke에서 템플릿을 템플릿이있는 폴더로 복사했습니다. 프로젝트를 컴파일 할 때 플랫폼을 확인하는 것을 잊지 마십시오-필수적으로 x86 (MT4 용) . 첫 번째 컴파일 중에 네임스페이스 RGiesecke가 없다는 오류가 발생하여 프로젝트에서 UnmanagedExports패키지를 설치했습니다. 모든 컴파일에서 오류 1건(ildasm.exe를 찾을 수 없음)이 발생했지만 .dll은 MT4에서 문제없이 작동합니다.
문제는 아마도 RGiesecke의 템플릿에 있으며 영어 버전의 Win, 영어 버전의 VS2017에서 올바르게 작동하며 VS2017의 모든 경로는 기본적으로 설정되어야합니다.
고마워요, 유용한 글!!! 존경!
MT에서 C#으로 문자열을 전달하는 방법, 나는 기사에서 그런 것을 찾지 못했습니다. 설명해 주세요.
고마워요, 유용한 글!!! 존경!
MT에서 C#으로 문자열을 전달하는 방법, 나는 기사에서 그런 것을 찾지 못했습니다. 설명해 주세요.
관리되지 않는 내보내기를 사용하여 MQL5에 C# 코드 노출하기라는 새 문서가 게시되었습니다:
저자: investeo
안녕하세요, investeo 님, 좋은 글입니다!
mql5 코드에서 C# DLL을 연결하는 방법에 대해 검색하던 중 이 기사를 발견했습니다. 그리고 이것은 저에게 많은 도움이되었습니다! 고마워요.
이제 타사 서버와 웹 소켓 연결을 실행하는 DLL에서 데이터를 가져와야하고 서버에서 오는 라이브 데이터를 MQL5로 보내야하지만 MQL5와 DLL 또는 API간에 실시간 및 양방향 통신을 구현 한 예제를 찾지 못했습니다.
도와주실 수 있나요?
오류 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : 오류 : 토큰 '{}' 구문 오류 ' in: { dllTest
이 오류는 중국어 시스템에서 발생하는데, UnmanageExports가 IL 파일을 생성할 때 일부 주석이 중국어로 생성되어 UnmanageExports가 제대로 작동하지 않기 때문입니다. 이 문제는 일본어 및 영어 운영 체제에서는 발생하지 않으며, 해결 방법이 있으므로 운영 체제를 영어로 변경할 수 있습니다.
그러나 이것은 너무 많은 문제가 될 것입니다. 여기에서 문제를 해결하기 위해 작은 여우를 꺼내야합니다!
다음 주소에서 Little Fox가 제공하는 관리되지 않는 내보내기 수정 프로그램을 다운로드하세요.
https://www.noisyfox.cn/397.html
http://www.magecorn.com/p/280.shtml .
자세한 내용은 위의 두 문서를 참조하세요.
위 코드의 소유자가 어떻게 실행할 수 없나요?
2017.04.28 23:48:08.774 'Testme.dll'에서 '추가'를 찾을 수 없습니다.
편집기 탐색기에서 "모든 파일 유형 표시"를 켜고 마우스로 DLL을 잡고 프로그램의 MQL5 창에 던져 넣습니다.
아마 결과에 놀라실 겁니다.
안녕하세요. 2018....
Net으로 작성된 내보낸 함수를 호출하는 예제를 어디에서 볼 수 있나요?
IJW의 도움으로 C ++ 스트리퍼를 사용한 다음 컴파일러-링커를 사용하여 순전히 하나의 단일 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.
좋은 오후. 하나의 파일에 c++/c++CLI/c#을 빌드하는 단계별 테스트 예제를 작성할 수 있습니까? 기사 작성자와 동일한 간단한 예제입니다.
mt4(또는 mt5)에서 액세스하기 위해 C#으로 작성된 함수의 간단한 예를 제공해주세요 ............ Sharp를 사용하여 함수에 값 a와 b를 전달하고 결과를 mt4(mt5)에 반환합니다.
문서에서 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));
}
//+------------------------------------------------------------------+
나는 3 일과 3 박을 인터넷 검색과 실험에 보냈고, 일반적으로 예제는 VS2017에서 작동하며 MT4에서 .dll을 컴파일하고 실행할 수 있었지만 ..... 러시아어로 된 Win10에서는 실행할 수 없습니다.
Win7-64로 가상 머신을 설치했지만 영어로 된 VS2017의 영어 버전을 설치하고 C # 용 패키지 만 설치하고 RGiesecke에서 템플릿을 템플릿이있는 폴더로 복사했습니다. 프로젝트를 컴파일 할 때 플랫폼을 확인하는 것을 잊지 마십시오-필수적으로 x86 (MT4 용) . 첫 번째 컴파일 중에 네임스페이스 RGiesecke가 없다는 오류가 발생하여 프로젝트에서 UnmanagedExports패키지를 설치했습니다. 모든 컴파일에서 오류 1건(ildasm.exe를 찾을 수 없음)이 발생했지만 .dll은 MT4에서 문제없이 작동합니다.
문제는 아마도 RGiesecke의 템플릿에 있으며 영어 버전의 Win, 영어 버전의 VS2017에서 올바르게 작동하며 VS2017의 모든 경로는 기본적으로 설정되어야합니다.
작동 방식은 다음과 같습니다.)
이 접근 방식이 .NET 버전 5에서 작동하나요?
테스트해 보지는 않았지만 작동할 것 같습니다.
MT4는 C#과 상호 작용하기가 매우 어렵고 항상 몇 가지 함정이 있습니다.
MT5로 전환하는 것이 더 쉽습니다.
그러나 원칙적으로 MT4를 사용하려면 옵션으로 기사의 방법론에 따라 C#에서 .dll을 시작하고 별도의 스레드에서 C# 코드를 시작하고 교환을 구성하는 경우 64 비트 C# 라이브러리를 다음과 같이 시작했습니다.