기고글 토론 "DLL 생성이 불필요한 이유"

 

새로운 기고글 DLL 생성이 불필요한 이유 가 게재되었습니다:

MQL5 기능이 부족하다고 느껴지면 개발자는 추가 도구를 이용하게 됩니다. 다른 프로그램 언어를 이용해 중간 DLL을 만들어야 하죠. MQL5로 다양한 형식의 데이터를 만들어 API로 전송할 수는 있지만 수락된 포인터에 대한 데이터 추출 과정에서 발생하는 문제는 해결할 수 없습니다. 이 글에서는 복합 데이터 유형을 다루고 교환하는 간단한 메커니즘에 대해 자세히 알아보겠습니다.

다이어그램 1은 여러 데이터 의 크기를 나타냅니다.

MQL5 데이터 형 사이즈


Memcpy 함수는 한 메모리 영역에서 다른 메모리 영역으로 데이터를 복사할 때 필요하죠.
그림 2는 4 바이트 복사를 보여 줍니다.

memcpy 4 바이트 복사 예시

MQL5에서는 다음과 같이 보일 겁니다.

작성자: ---

 
기사 주셔서 감사합니다, 질문 : memcpy 함수를 사용할 때 예제에서 주소를 int로 작성했는데 시스템이 x64 인 경우 긴 변수를 사용해야합니까? 프로그래밍 방식으로 어떤 시스템(x64, x86)인지 어떻게 알 수 있나요? 감사합니다.
 

를 사용할 수 있지만, 문자 배열에서 4바이트 수신자로 인트를 사용하는 경우에는 전혀 필요하지 않습니다. (즉, & 포인터를 정확히 전달합니다).

찾는 방법 - 여기 http://forum.ixbt.com/topic.cgi?id=26:37968

 
sergeev:

를 사용할 수 있지만, 문자 배열에서 4바이트 수신자로 인트를 사용하는 경우에는 전혀 필요하지 않습니다. (즉, & 포인터를 정확히 전달합니다).

확인하는 방법 - 여기 http://forum.ixbt.com/topic.cgi?id=26:37968

이 구조에서 교환 시간에 대해 명확히 설명해 주시겠습니까 (예 : Int 형식의 10 개 숫자)?
 
shelandr:
이 구조의 교환 시간(예: Int 형식의 숫자 10개)에 대해 명확히 설명해 주시겠어요?

질문을 명확히 해주세요.

멤피 속도에 대해 질문하는 건가요? 이것은 mql보다는 바람 라이브러리의 작업과 더 관련이 있는 창의적인 질문이라고 생각합니다.

 
외부 DLL API 작업에 관한 가장 유용하고 유익한 글입니다. 정말 감사합니다.
 

안녕하세요. 이 기사가 비교적 오래 전에 작성되었음에도 불구하고 라이브러리 dll과의 데이터 교환 문제는 여전히 관련이 있습니다. 저도 최근에 특정 기능을 구현해야 할 필요성에 직면하여 직접 dll을 작성할지 아니면 라이브러리 dll을 사용할지 선택해야 했습니다. 저는 후자를 선택했고 자연스럽게 구조를 전송하고 데이터를 다시 가져오는 어려움에 직면했습니다. 이 기사를 읽고 나서도 몇 가지 요점을 제대로 이해하지 못했는데, 제 생각에는 매우 복잡합니다. 이 기사에서는 구조를 외부 환경으로 전송할 때 라이브러리 함수가 결과를 저장하고 추가 작업을 위해 변환해야하는 할당 된 메모리 영역으로 배열을 사용하는 것이 좋습니다. 저는 이 분야에 대한 경험이 거의 없고 제 추론이 아마추어처럼 보일 수도 있지만, 현명한 사람들이 저를 바로잡아 주기를 바라며 제 의견을 표현하겠습니다. 이전 기사(https://www.mql5.com/ko/articles/1543)에 언급된 간단한 예를 들어 보겠습니다.

이 글은 라이브러리 dll을 통해 파일을 검색하는 문제를 다루고 있습니다. 또한 필요한 크기의 배열에 대한 포인터를 전달한 다음 이 배열에서 필요한 데이터를 추출하는 방법을 제안합니다.

본질적으로 구조란 무엇인가요? 동일한 메모리 섹션입니다. 이제 구조체를 전달하고 데이터를 검색하는 방식을 변경해 보겠습니다:

// 데이터 유형 정의 선언

#define  DWORD int
#define  TCHAR short // 유니코드로 작업할 것이므로 이 유형을 설정합니다.
#define  MAX_PATH (260)

// 파일타임 구조를 선언합니다.
struct FILETIME {
  DWORD dwLowDateTime;
  DWORD dwHighDateTime; 
};

// 검색 결과의 데이터 구조를 선언합니다.
struct _WIN32_FIND_DATA {
  DWORD dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  DWORD nFileSizeHigh;
  DWORD nFileSizeLow;
  DWORD dwReserved0;
  DWORD dwReserved1;
  TCHAR cFileName[MAX_PATH];
  TCHAR cAlternateFileName[14]; 
};

// 데이터 유형을 선언하면 전혀 변경하지 않고 WinAPI 구조를 복사합니다.
// 라이브러리 함수 가져오기
#import "kernel32.dll"
   int  FindFirstFileW(string path, _WIN32_FIND_DATA& answer);
#import 
//+------------------------------------------------------------------+
//| 전문가 초기화 기능|
//+------------------------------------------------------------------+
int OnInit()
  {
// 이전에 생성한 구조의 유형으로 변수를 생성합니다. 
   _WIN32_FIND_DATA data;
// 라이브러리 함수를 호출하여 구조체에 대한 포인터를 전달하고 실제로 할당된 메모리에 대한 포인터를 전달합니다. 
int handle = FindFirstFileW(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\*.mq5", data);
   if(handle!=-1)
      {
        // 추가 변환 없이 구조의 필드에 액세스하여 검색 결과 보기 
Print("파일 이름 발견: ", ShortArrayToString(data.cFileName));   
         Print("임시로 찾은 파일 이름: ", ShortArrayToString(data.cAlternateFileName));
         Print("파일 크기 발견: ", data.nFileSizeLow); 
      }
//---
   return(INIT_SUCCEEDED);
  }
//+-
Групповые файловые операции
Групповые файловые операции
  • 2008.07.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Иногда требуется проделать одинаковые операции для некоторой группы файлов. Если у вас есть список файлов, входящих в эту группу, то это не проблема. Но если этот список нужно получить самостоятельно, то возникает вопрос: "Каким образом?" В статье предлагается сделать это с помощью функций FindFirstFile() и FindNextFile(), входящих в библиотеку kernel32.dll.
 
Алексей Барбашин: 필요한 크기의 배열에 대한 포인터를 전달한 다음 이 배열에서 필요한 데이터를 추출하는 제안도 있습니다. 또한 필요한 크기의 배열에 대한 포인터를 전달한 다음 이 배열에서 필요한 데이터를 추출하는 방법도 제안합니다.

구조체란 본질적으로 무엇인가요? 동일한 메모리 섹션입니다. 이제 구조체를 전달하고 데이터를 검색하는 접근 방식을 변경해 보겠습니다:

편집기에 코드를 올바르게 붙여넣었습니다.

 
Rashid Umarov:

편집기를 통해 코드를 올바르게 붙여넣었습니다.


감사합니다! 아직 여기서 코드 서식을 올바르게 지정하는 방법을 찾지 못했습니다. (((

 
Алексей Барбашин:

정말 감사합니다! 아직 여기에 제대로 코딩하는 방법을 찾지 못했습니다. (((


코드를 삽입하는방법

 
Vladimir Karputov:

코드를 삽입하는방법 .


감사합니다! 살펴볼게요! )))