를 사용할 수 있지만, 문자 배열에서 4바이트 수신자로 인트를 사용하는 경우에는 전혀 필요하지 않습니다. (즉, & 포인터를 정확히 전달합니다).
찾는 방법 - 여기 http://forum.ixbt.com/topic.cgi?id=26:37968
를 사용할 수 있지만, 문자 배열에서 4바이트 수신자로 인트를 사용하는 경우에는 전혀 필요하지 않습니다. (즉, & 포인터를 정확히 전달합니다).
확인하는 방법 - 여기 http://forum.ixbt.com/topic.cgi?id=26:37968
안녕하세요. 이 기사가 비교적 오래 전에 작성되었음에도 불구하고 라이브러리 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
구조체란 본질적으로 무엇인가요? 동일한 메모리 섹션입니다. 이제 구조체를 전달하고 데이터를 검색하는 접근 방식을 변경해 보겠습니다:
편집기에 코드를 올바르게 붙여넣었습니다.
편집기를 통해 코드를 올바르게 붙여넣었습니다.
감사합니다! 아직 여기서 코드 서식을 올바르게 지정하는 방법을 찾지 못했습니다. (((
새로운 기고글 DLL 생성이 불필요한 이유 가 게재되었습니다:
MQL5 기능이 부족하다고 느껴지면 개발자는 추가 도구를 이용하게 됩니다. 다른 프로그램 언어를 이용해 중간 DLL을 만들어야 하죠. MQL5로 다양한 형식의 데이터를 만들어 API로 전송할 수는 있지만 수락된 포인터에 대한 데이터 추출 과정에서 발생하는 문제는 해결할 수 없습니다. 이 글에서는 복합 데이터 유형을 다루고 교환하는 간단한 메커니즘에 대해 자세히 알아보겠습니다.
다이어그램 1은 여러 데이터 형의 크기를 나타냅니다.
Memcpy 함수는 한 메모리 영역에서 다른 메모리 영역으로 데이터를 복사할 때 필요하죠.
그림 2는 4 바이트 복사를 보여 줍니다.
MQL5에서는 다음과 같이 보일 겁니다.
작성자: ---