이 배열에 어떤 값이 속하는지, 그리고 그 값에서 원래 값을 얻는 방법을 이해할 수 없으며 문제는 이러한 값을 화면에 표시 할 수 없다는 것이 아닙니다.
2. 예를 들어 memcpy를 복사 할 때 uchar[4] 배열을 다른 유형의 값으로 올바르게 채우는 방법:
uchar dst[4];
short src1 = 2;
short src2 = 13331;
memcpy(dst, src1, sizeof(src1));
memcpy(dst, src2, sizeof(src2)); // 이미 존재하는 값을 덮어씁니다. 즉, dst에 쓸 때 src1을 쓴 후 2바이트의 오프셋으로 주소를 지정해야 한다고 가정합니다.
대답이 사소하고 모든 것이 간단하게 끝나는 것처럼 느껴지지만 올바르게 적는 방법은 무엇입니까?
이 기사의 저자는자전거 dll없이 IPC 상호 운용성에 대한 정보에 대한 접근 가능한 프레젠테이션에 대해 매우 감사합니다.
메모리 작업은 다소 복잡해 보이지만 몇 가지 질문을 제외하고는 접근 방식이 명확하므로 지식이 풍부한 사람들이 이해하는 데 도움이되기를 바랍니다:
1. memcpy의 도움으로 2바이트 변수를 짧은 배열 uchar[2]에 복사하는데, 이 정보가 배열 자체에 어떻게 저장되나요?
uchar 배열의 인덱스 0과 1에 있는 값은 어떤 형식일까요?
값은 바이트 단위로 분할되어 배열에 기록됩니다. 나는 여기서 이해한다고 생각합니다.
이 배열에 어떤 값이 속하는지, 그리고 그 값에서 원래 값을 얻는 방법을 이해할 수 없으며 문제는 이러한 값을 화면에 표시 할 수 없다는 것이 아닙니다.
2. 예를 들어 memcpy를 복사 할 때 uchar[4] 배열을 다른 유형의 값으로 올바르게 채우는 방법:
대답이 사소하고 모든 것이 간단하게 끝나는 것처럼 느껴지지만 올바르게 적는 방법은 무엇입니까?
인쇄를 사용해 보셨나요?
네 번째 예제에서 오류가 발생합니다: '연산자=' - 잘못된 연산 사용 SAMPLE_04.mq4 34 7
#property copyright ""
#property link ""
#property version ""
#property strict
//Пример 4. Копирование структур средствами MQL5
//---
struct str1
{
double d; // 8 байт
long l; // 8 байт
int i[3]; // 3 * 4 = 12 байт
};
//---
struct str2
{
uchar c[ 8 + 8 + 12 ]; // размер структуры str1
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
str1 src; //
src.d = -1; //
src.l = 20; //
//--- заполняем параметры структуры
ArrayInitialize(src.i, 0);
str2 dst; //
//--- превратили структуру в байтовый массив
dst = src; // <----- Ошибка
}
메모리 섹션에 대한 아이디어는 이해하지만 정의가 올바르지 않을 수도 있나요?
그 이유가 무엇인지 알려주시겠어요?
미리 감사드립니다.메모리 위치에 대한 개념은 명확하지만 정의에 뭔가 잘못된 것이 있을까요?
그 이유는 무엇일까요?
다른 유형의 구조체는 더 이상 복사할 수 없으며, MQL은 이 가능성을 제거했습니다.
유니온 사용
그런데 uchar는 틀렸고, 의심스럽게도 double도 거기에 존재합니다.
그건 그렇고 src는 정확히 무엇에 속하고 전달 될지 지정해야합니다.
누군가 이미 제안한대로 수정했습니다. 잘됐네요. 생각해보세요. 행운을 빕니다.
오늘 MQL4에서 작동하나요?
언어(MQL4/MQL5)는 현재 완전히 동일합니다. 차이점은 MQL4에서 누락된 2-3개의 기능(ArrayPrint 및 기타 작은 기능)과 MQL5의 "새로운 기능"(데이터베이스, DirectX 및 OpenCL)에 있습니다.
하지만 이 기사는 8년 전에 작성되었으며, 이제 MQL은 엄격하게 타입이 지정된 언어가 되었고, 2개의 구조를 할당하려면 (기사에서 예로 든) 복사 생성자를 작성하거나 구조를 바이트 배열로 직렬화했다가 다시 되돌려야 합니다.
다른 유형의 구조체를 할당하는 것이 더 이상 작동하지 않습니다(매개변수 변환이 허용되지 않음 - 동일한 유형의 변수가 예상됨).
하지만 유니온으로 작업하는 것은 가능합니다: