오류, 버그, 질문 - 페이지 2580

 
Koldun Zloy :

1. MQL에서는 포인터가 복사되지 않고 문자열이 복사됩니다.

_DLLAPI void fnReplaceString( wchar_t * text, wchar_t * from , wchar_t * to)
{
   wchar_t * cp;
   
   //проверка параметров
   if (text==NULL || from ==NULL || to==NULL) return ;
   if (wcslen( from )!=wcslen(to))             return ;
 
   //поищем подстроку
   if ((cp=wcsstr(text, from ))==NULL)         return ;

   //заменим
   memcpy(cp,to,wcslen(to)* sizeof (wchar_t));
}
 #import "MQL5DLLSamples.dll"
void fnReplaceString( string & text, string from, string to);
#import


섹션 3.3

 
Koldun Zloy :

2. MQL에서 200자의 문자열을 선택했습니다. 그런 다음 164자를 복사했습니다. 그런 다음 MQL에서 문자열의 크기를 확인합니다. 그는 200번을 머물렀다.

사이즈가 아닌 길이! 길이(문자), 크기(바이트).
164자의 문자열을 받은 후 확인했는데 길이도 200으로 유지되었습니다.
이에 대해 어떻게 생각하십니까?

 
Roman :

이것이 정확하기 위해 나는 memcpy를 포기하고 wcscpy 또는 wcsncpy를 사용했습니다.
결과, 위의 게시물.

나는 sizeof( wchar_t* )를 의미했습니다.

 
Roman :


섹션 3.3

저와 논쟁하지 마시고 이 글을 좀 더 자세히 읽어보시는 것이 좋을 것 같습니다. 그리고 무슨 일이 일어나고 있는지 알아내십시오.

그러면 문제가 없을 것입니다.

하고 싶은 일은 사실 그렇게 어렵지 않습니다.

 
Roman :

사이즈가 아닌 길이! 길이(문자), 크기(바이트).
164자의 문자열을 받은 후 확인했는데 길이도 200으로 유지되었습니다.
이에 대해 어떻게 생각하십니까?

이런 일이 발생하는 이유는 이미 위에서 설명했습니다.

 
Koldun Zloy :

하고 싶은 일은 사실 그렇게 어렵지 않습니다.

글쎄, 그렇게 어렵지 않은 경우 말해.
아니면 이것이 정상적인 행동이라고 생각하십니까?

 
Roman :

글쎄, 그렇게 어렵지 않은 경우 말해.
아니면 이것이 정상적인 행동이라고 생각하십니까?

즉, 당신은 아무것도 이해할 계획이 없으며 기성품 레시피를 제공하면됩니다.

그게 부담이라면 왜 프로그래밍을 해야 하는지 이해가 안 가는데 이건 니 몫이다.


당신이 질문을 하고 상세한 재현 가능한 코드를 보여주고 싶지 않다면 누군가 당신을 기꺼이 도와줄 것이라고 생각합니까?

그들이 당신에게 무엇을 쓰거나 읽지 않거나 더 많이 아는 사람들과 논쟁합니까?


따라서 기성품 레시피가 없습니다. DLL에서 문자열을 가져오는 일반적인 원리를 작성하겠습니다. 스스로 프로그래머라고 생각한다면 코드를 직접 작성하십시오.


1. MQL에서 ushort 배열을 생성합니다.

2. 초기화합니다.

3. 배열과 해당 크기를 DLL에 전달합니다.

4. DLL에서 wmemcpy_s() 함수를 사용하여 이 배열에 문자열을 복사합니다.

5. DLL에서 복사한 문자열의 길이를 반환합니다.

6. MQL에서 ShortArrayToString() 함수를 사용하여 배열에서 문자열을 만듭니다.

 
이 주제와 관련이 없는 댓글은 " MQL4 MT4 MetaTrader 4 초보자의 질문 "으로 이동되었습니다.
 

서버 중 하나(MQ가 아님)에서 MT5는 미친 듯이 작동합니다. 백분율을 100% 로드하고 다양한 기기에 대한 로그에 다음 메시지를 집중적으로 표시합니다.

HistoryBase 지속적인 자발적 업데이트

그래프가 깜박입니다. 일하는 것은 불가능합니다.

이 문제를 로컬에서 해결할 수 있습니까 아니면 유일한 방법입니까? 서버가 분명히 일부 게임을 마칠 때까지 기다리는 것입니까?

 
Koldun Zloy :

즉, 당신은 아무것도 이해할 계획이 없으며 기성품 레시피를 제공하면됩니다.

그게 부담이라면 왜 프로그래밍을 해야 하는지 이해가 안 가는데 이건 니 몫이다.

당신이 질문을 하고 상세한 재현 가능한 코드를 보여주고 싶지 않다면 누군가 당신을 기꺼이 도와줄 것이라고 생각합니까?

그들이 당신에게 무엇을 쓰거나 읽지 않거나 더 많이 아는 사람들과 논쟁합니까?

따라서 기성품 레시피가 없습니다. DLL에서 문자열을 가져오는 일반적인 원리를 작성하겠습니다. 스스로 프로그래머라고 생각한다면 코드를 직접 작성하십시오.


1. MQL에서 ushort 배열을 생성합니다.

2. 초기화합니다.

3. 배열과 해당 크기를 DLL에 전달합니다.

4. DLL에서 wmemcpy_s() 함수를 사용하여 이 배열에 문자열을 복사합니다.

5. DLL에서 복사한 문자열의 길이를 반환합니다.

6. MQL에서 ShortArrayToString() 함수를 사용하여 배열에서 문자열을 만듭니다.

여기 논란 어디서 봤어? 작업 토론이 있습니다. 오만한 파토스와 함께 닭장으로 의미를 왜곡할 필요가 없습니다.
아무도 당신에게 준비된 것을 요구하지 않았습니다. 나는 당신이 포인터로 해결책을 알고 있다고 생각했지만 아니요, 틀렸습니다.
당신은 그 주제를 읽지 않고 있고 오랫동안 배열에 대한 논의가 있어왔고 모두가 이것을 잘 알고 있습니다.
그리고 저는 오랫동안 어레이에 기대어 왔습니다. 그러나 mql에는 문자열이 있으므로 직접 사용하지 않는 것이 좋습니다.
포인터를 복사하는 mql 문자열의 버그에 대한 것입니다. 여기에서 우리가 이야기하고 있습니다.
ushort를 통해서만 해결되는 것이 아니라 모든 것이 해결될 수 있음을 알려드립니다. 배열에는 많은 옵션이 있습니다.
하지만 제 경우에는 배열을 사용하고 싶지 않습니다. 코드 구조 면에서 항상 합리적이지는 않습니다.
직접 작업할 수 있지만 올바르게 작동해야 하는 mql 문자열이 있는 경우에는 더욱 그렇습니다.