[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 250

 
TarasBY :
먼저 모든 미결 주문에 대한 현재 이익을 계산한 다음 선언된 수준과 비교합니다. 더 높으면 모든 주문을 삭제합니다. 이 절차는 Expert Advisor(코드가 있음)에 의해 수행됩니다.

팁 고마워
 

난 이해가 안 돼요.

gyfto :
//C++
MT4_EXPFUNC int __stdcall GetStrAddress( const char *str) {    
    MqlStr* s = (MqlStr*)str;
     return ( int )s-> string ; 
}

쥰코 :
여전히 다음과 같이:

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
   return ( int (szStr));
 }

다음 코드로 세 번 실행했습니다.

 #property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString( int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress( string str);
int GetStrAddress( string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s= "" ; strAddress (s);
   s=s+ "something" ; strAddress (s);
   s= "MyStr" ; strAddress (s);
   s= "mystr" ; strAddress (s);
   return ( 0 );
  }

int start()
  {
   return ( 0 );
  }
void strAddress ( string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print ( " строка " , CharToStr( 34 ), myStr, CharToStr( 34 ), ", старый вариант: " , IntegerToHexString(addrOld), ", новый вариант: " , IntegerToHexString(addrNew));
  }

로그에는 다음이 표시되었습니다.

строка "" , старый вариант: 656D6F73 , новый вариант: 01CD8A90
строка "something" , старый вариант: 6E696874 , новый вариант: 01CD9010
строка "MyStr" , старый вариант: 00360072 , новый вариант: 01CD8AA0
строка "mystr" , старый вариант: 00360072 , новый вариант: 01CD8AA8

строка "" , старый вариант: 656D6F73 , новый вариант: 01C97858
строка "something" , старый вариант: 6E696874 , новый вариант: 01CDCC30
строка "MyStr" , старый вариант: 00360072 , новый вариант: 01C978868
строка "mystr" , старый вариант: 00360072 , новый вариант: 01C997870

строка "" , старый вариант: 656D6F73 , новый вариант: 01D93108
строка "something" , старый вариант: 6E696874 , новый вариант: 01CC5A58
строка "MyStr" , старый вариант: 00360072 , новый вариант: 01D93118
строка "mystr" , старый вариант: 00360072 , новый вариант: 01D93120

첫 번째 변형에는 MqlStr.string 구조 필드의 첫 번째 요소에 대한 포인터가 있고, 두 번째 변형에는 문자열의 첫 번째 요소에 대한 포인터가 있습니다(LP C STR은 여전히 동일한 const 문자 * ). 다른 주소가 표시됩니다. 왜? char 배열로서의 문자열과 MQL4 표현의 내부 구조로서의 문자열의 주소가 다르다는 것이 밝혀졌습니까? 아니면 ExpertSample에서 내부 형식으로 설명한 "문자열 구조"가 인위적이고 실제로 MQL4의 내부 형식이 lpsz라는 의미입니까? 아니면 단순히 첫 번째 코드를 잘못 읽었습니까?

 
모두에게 좋은 하루. 말해주세요. 컴파일 후 어드바이저 아이콘에 잠금이 나타나고 프로그램을 통해 다운로드 창에서만 볼 수 있고 폴더에는 보이지 않습니다. 수정하는 방법은 무엇입니까? 고맙습니다.
 
일부 예에서는 return(-1), return(0) 또는 그냥 반환을 봅니다. 주어진 지점에서 프로그램을 중단하려면 return(0)을 사용합니다. return(-1)과 return이 무엇을 하는지 알려주실 수 있습니까?
 
gyfto :
아니면 ExpertSample에서 내부 형식으로 설명한 "문자열 구조"가 인위적이고 실제로 MQL4의 내부 형식이 lpsz라는 의미입니까?

이것은 문자열이 MqlStr이 아니라 정확히 char*로 DLL에 전달됨을 의미합니다. 그러나 ex4 프로그램이 문자열을 MqlString으로 저장 하지 않는다는 의미는 아닙니다. 일반적으로 ex4에서 dll로 매개변수를 전달하는 것은 (개발자에 따르면) 모든 종류의 검사 및 매개변수 변환이 수반되는 다소 복잡한 프로세스입니다.
 
laveosa :
모두에게 좋은 하루. 말해주세요. 컴파일 후 어드바이저 아이콘에 잠금이 나타나고 프로그램을 통해 다운로드 창에서만 볼 수 있고 폴더에는 보이지 않습니다. 수정하는 방법은 무엇입니까? 고맙습니다.
Win 7이고 터미널이 시스템 드라이브에 있습니까? 현재와 미래의 문제를 없애고 싶다면 터미널을 다른 디스크로 옮기면 "모든 것이 잘 될 것"입니다.
 
paladin80 :
일부 예에서는 return(-1), return(0) 또는 그냥 반환을 봅니다. 주어진 지점에서 프로그램을 중단하려면 return(0)을 사용합니다. return(-1)과 return이 무엇을 하는지 알려주실 수 있습니까?
이것은 함수의 반환 값입니다. mat.chasti 로 돌아갑니다.
 
paladin80 :
일부 예에서는 return(-1), return(0) 또는 그냥 반환을 봅니다. 주어진 지점에서 프로그램을 중단하려면 return(0)을 사용합니다. return(-1)과 return이 무엇을 하는지 알려주실 수 있습니까?

return(-1)은 함수의 결과로 마이너스 1을 반환합니다. (-1)은 이 프로그램의 개발자가 직접 입력한 경우에만 의미가 있을 수 있습니다. 그렇지 않으면 아무 의미가 없습니다.

return은 단순히 함수를 종료합니다(반환 유형이 void일 때 사용됨).

 
TarasBY :
이것은 함수의 반환 값입니다. mat.chasti 로 돌아갑니다.

일반적으로 return( 0 )은 int start() 함수를 종료하고 다음 틱을 기다립니다. 숫자 또는 -1이 없으면 int start()에서는 어떻게 됩니까?

 
TarasBY :
Win 7이고 터미널이 시스템 드라이브에 있습니까? 현재와 미래의 문제를 없애고 싶다면 터미널을 다른 디스크로 옮기면 "모든 것이 잘 될 것"입니다.

정말 감사합니다 :) 시도해보겠습니다.