기고글 토론 "관리되지 않는 내보내기를 사용하여 MQL5에 C# 코드 노출" - 페이지 5

 
제가 알기로는 RGiesecke UnmanagedExportLibrary 템플릿은 일부 위치에서 IL 파일을 구문 분석하기 위해 // 코드와 같은 주석을 사용합니다. 러시아어를 사용하는 Windows 사용자는 // 크기와 같은 러시아어 주석을 삽입하기 때문에 템플릿이 작동하지 않습니다. DLL에는 단순히 함수가 없기 때문에 오류 127이 발생하는 것입니다. 이 템플릿만을 위해 Windows 인터페이스 언어를 변경하고 싶지 않지만 꽤 잘 작동하고 올바른 것 같지만 적어도 DLL은 적어도 언로드되지 않은 것 같습니다. Microsoft는 또한 빗자루이며 C++에서 C#으로 데이터를 쉽게 전송할 수 있지만 그 반대의 경우는 큰 문제입니다.
 

64승 8패를 기록 중입니다.

vs2013으로 컴파일했습니다.

그러나 로드되지만 해결되지 않은 가져오기 함수 호출이 있습니다.

이 문제를 어떻게 해결할 수 있나요?

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) 해결되지 않은 가져오기 함수 호출

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) '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 'Testme.dll'에서 'Set2DArray'를 찾을 수 없습니다.

 
ANG3110:
내가 이해하는 한 RGiesecke UnmanagedExportLibrary 템플릿은...

이 메시지는 반년 전에 남긴 메시지입니다. 그 이후로 변경된 사항이 있나요????

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
누구든지 ReplaceString 함수를 작동시킬 수 있었습니까? 이 함수를 제외한 모든 함수가 작동하고 있습니다, 어떤 아이디어가 있습니까?
 

방법 1:

64 win 7, vs2012 C#이 있습니다. 소유자의 testme.zip 템플릿 파일을 다운로드했습니다.

프롬프트 중간에 몇 가지 오류 (잘못된 경로, 누락 된 파일 등 등)가 해결되었습니다.

그러나 결국에는 여전히 같은 문제가 나타나고 위층에 나타납니다. 이제 해결되었는지 모르겠습니다. 어떤 방법으로 해결할 수 있습니다.



방법 2:

NuGet은 RGiesecke 패키지를 설치했습니다.

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

201311의 최신 버전은 다음과 같이 프롬프트합니다.

오류 2 C:\사용자\관리자\앱데이터\로컬\템프\tmp8B24\dllTest.il(58) : 오류 : 토큰 '{. ' 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)
 

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.

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로 보낼 수 있었습니까?

정수, 이중, 부동 소수점을 보낼 수 있었지만 문자열 변수의 경우이 오류가 발생합니다:

Access violation read to 0x0000007B

다음은 내 C# 구조입니다:

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            public string broker;
// 공개 문자열 서버;
            public int account;
// 공개 문자열 사용자;

            public double balance;
            public Double credit;
// 공용 문자열 통화;
            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 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;
// 문자열 사용자;
      
      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가 완전히 충돌하고 오류가 발생하지 않고 창에서 중단되고 충돌합니다.

       [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 사용에 대한 새로운 기사를 작성할 예정입니다. 거기에는 흥미로운 것들이 많이 추가되었습니다.

그 동안 논의중인 기사의 예제를 사용할 수 있습니다. 거기에는 복잡한 것이 없습니다.

그리고 ... 얼마나 기다려야 하나요? 1 년, 2 년... 아니면 10년?

벌써 3 년이 지났습니다. 처음에 언급 한 기사에 따르면 dll에서 메서드를 가져올 수 없습니다. 예제는 어디에 있나요?

 

이 글을 읽어주셔서 대단히 감사합니다. 저는 여기에 있는 아이디어를 사용하여 C#용 오픈소스 MQL 라이브러리를 구축했습니다.

https://github.com/jseparovic/MQL4CSharp

아직 개발 중이며 현재 테스트되지 않은 상태이지만 초기 테스트 결과 아이디어가 작동하는 것으로 나타났습니다.

C# 코드가 실행될 스레드와 통신을 위한 게터/세터를 사용하여 C#에서 명령을 전송하는 방식은 매우 기본적입니다. MQL은 밀리초마다 대기 중인 명령에 대해 폴링하는 반면, C# 코드는 결과가 작성될 때까지 차단할 수 있습니다.

C#으로 전략을 구현하는 방법의 예는 https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs 을 참조하세요.

Cheers,

Jason