"10분 안에 MQL5용 DLL 라이브러리를 작성하고 데이터를 교환하는 방법" 기사에 대한 토론 - 페이지 4

 
그리고 이 메시지는 "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) 액세스 위반 쓰기가 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLSamples'의 0x00000000에 기록되었습니다.
MT5 빌드 240. dll 호출이 허용됩니다.
 
joo :
그리고 이 메시지는 "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) 액세스 위반 쓰기가 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLSamples'의 0x00000000에 기록되었습니다.
MT5 빌드 240. dll 호출이 허용됩니다.

기사 데모에서:

4. DLL 함수에서 예외 잡기

터미널 자체의 충돌을 피하기 위해 DLL 함수에 대한 각 호출은 처리되지 않은 예외 래퍼에 의해 자동으로 보호됩니다. 이 메커니즘을 사용하면 대부분의 표준 오류(접근할 수 없는 메모리 액세스, 0으로 나누기 등)로부터 자신을 보호할 수 있습니다.

이 메커니즘의 기능을 테스트하기 위해 다음 코드를 생성합니다.

_DLLAPI void __stdcall fnCrashTest( int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr= 0 ;
  }

터미널에서 호출합니다.

 #import "MQL5DLLSamples.dll"
void fnCrashTest( int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest( NULL );
   Print ( "Этого текста не увидите!" );
//---

결과적으로 예외 생성과 함께 0 주소에 쓰기를 시도합니다. 터미널은 이를 가로채서 로그에 보고하고 작업을 계속합니다.

MQL5DLL Test (GBPUSD,M1) 20 : 31 : 12 Access violation write to 0x00000000


 
Renat :
기사 데모에서:

고맙습니다. 그래서 기사를 읽을 때 별로 주의를 기울이지 않았습니다. :)

추신 그리고 저는 이렇게 말할 수 있습니다. "잘 들어, 동지! 가서 기사를 다시 읽으십시오!" - 그리고 그가 옳을 것입니다. 그들이 말하는 것처럼 존중하고 존중하십시오.

 
레나트 :

친애하는 피사르,

이론가실무자 사이에 논쟁이 있습니다.
본질적으로 개인화되지 않고. 좋은 이론가는 실제적으로 축적된 경험에서 시작하고, 좋은 실천가는 7번 측정합니다.

물론 "세계 평화"를 위해 싸우는 것을 금지하는 사람은 없지만 "개선하지 않는 이유는 무엇입니까?"보다 더 많은 요소를 고려하십시오.

그것이 내가 쓴 것입니다. 일상적인 작업을 원하지 않기 때문에 사용하지 않을 것입니다. 결국 모든 지표, 모든 시장 환경, 다른 기간의 전체 역사 등 모든 것을 은색 플래터에 제공해야 합니다. 차트 작성이 필요하지만 마음속으로 지표를 조작할 것입니까?

즉, 실제로 본격적인 터미널이 필요합니다. 그리고 우리는 그것을 제공합니다: MetaTrader 5 + MQL5 + DLL. 그것을 프레임 워크라고 부르거나 즉시 말하십시오 - 소스 / 구성 요소에 터미널을 제공하십시오 (결국 실제로 필요합니다).

이것은 평화 유지 활동은 아니지만 프로그래머의 삶을 더 쉽게 만들고 거래 시스템의 품질을 향상시키고 통합 가능성은 아직 누구에게도 해를 끼치 지 않았습니다. 예는 멀리 있지 않습니다. 볼랜드 델파이, MS .net은 완전히 개방형 프레임워크/컴포넌트 베이스/클래스 다이어그램과 플랫폼 사용자를 위한 소스 코드(델파이)의 상당 부분을 가지고 있습니다.

프로그래머는 보호되지 않는 모국어로 거래 시스템을 위한 스크립트를 작성할 수 있는 것이 "힘"이라고 잘못 생각하고 아무도 자신의 창작물을 사용하지 않는다는 사실에 놀랐습니다. 그러므로 그들은 태어나자마자 죽는다. 사용자 커뮤니티를 개발하고 만든 사람들은 훨씬 더 깊이 생각하고(이전에는 충돌이 있기 때문에) 그런 실수를 하지 않습니다.
현실적합시다. 소프트웨어를 출시하여 판매하고 6개월 또는 1년 후에 유료 업데이트를 출시하려면 코드 보호가 매우 중요합니다. 내가 이해하는 바와 같이 당신이 오랫동안 여기에 있었고 일련의 빌드 및 지원을 통해 플랫폼을 지속적으로 개선한다면 어떤 경쟁자도 당신을 얻지 못할 것입니다. 그러나 사용자는 훨씬 더 나은 코드를 작성할 수 있습니다. 그리고 코드뿐만 아니라 차량의 구조도 중요합니다! 나는 안티바이러스 프로그램에 비유할 수도 있습니다. AV 클라이언트를 해킹해도 아직 바이러스 데이터베이스 업데이트(여기서는 할당량)에 액세스할 수 없습니다.

제어된(기본적으로 비활성화된) DLL 호출은 허용되지만 거래 터미널에 누구인지 모르는 사람이 만든 DLL을 업로드하는 것은 패치되지 않은 Internet Explorer 6보다 더 나쁜 구멍입니다.
그래서 이 구멍은 단지 사용자의 허가입니다! 불량한 사용자가 X 회사에서 서명한 DLL에도 100% 유해성이 없음을 어떻게 보장할 수 있습니까? 결국, 의심스럽게 금지했기 때문에 그는 그것이 그에게 유용한지 여부를 결코 알지 못할 것입니다. 여기 심리학이...


자세한 내용 은 자동화된 터미널 거래에 대한 Google 트렌드 통계 :

세로좌표 눈금이 로그인지 궁금합니다.
그건 그렇고, 러시아에 대한 반영 데이터에서 빨간색 Metastock의 리더십을 볼 수 있습니다.

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

"답장" 기능을 이용해 주세요. 읽기가 매우 불편합니다.

인용된 블록을 나누려면 원하는 위치에 커서를 놓고 "일반 텍스트" 스타일을 선택하거나 Ctrl+1을 누릅니다.


일반적으로 그러한 조언으로 마무리하는 것이 좋습니다. 잘못된 전제를 기반으로 한 근본적으로 치명적이며 응용 언어에 적합하지 않습니다.

농담 으로 오래된 농담이 있습니다.

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

한 행인이 유대인에게 와서 루블을 던지며 말합니다.

- 잘 들어, 비문을 변경하십시오. 그렇지 않으면 배고픈 상태로 남을 것입니다.

지나가던 사람이 갔을 때, 유대인은 그의 이웃에게로 돌아서서 말했습니다.

알겠어, Izzy? 이 사람은 우리에게 상업을 가르칠 것입니다!

 
Renat :

"답장" 기능을 이용해 주세요. 읽기가 매우 불편합니다.

인용된 블록을 나누려면 원하는 위치에 커서를 놓고 "일반 텍스트" 스타일을 선택하거나 Ctrl+1을 누릅니다.


일반적으로 그러한 조언으로 마무리하는 것이 좋습니다. 잘못된 전제를 기반으로 한 근본적으로 치명적이며 응용 언어에 적합하지 않습니다.

농담 으로 오래된 농담이 있습니다.


좋습니다. 살인적인 전제 조건에 대한 실제 이유와 .net 프레임워크가 비좁은 이유를 밝히고 싶지 않다면 토론은 끝났습니다. 일화에 관해서는 - 자신을 측정하십시오. 수도원은 당신 것입니다.

5-ku로의 전환 후 뒤돌아 보지 않도록 모든 사람에게 행운을 빕니다.

 
Renat, 기사를 주셔서 감사합니다! 매우 흥미롭고 유익합니다. 아쉽게도 MQL5DLL Test.mq5 스크립트를 적용하지 못했습니다. 기사에 쓰여진대로 모든 것을했습니다. 그러나 스크립트를 실행했을 때 MT 5는 난파선처럼 닫혔습니다. 뭐가 문제인지 모르겠어 축 때문일까요? MS 비스타 x64가 있습니다. 해결책을 제안해주세요 :-)
 
denkir :
Renat, 기사를 주셔서 감사합니다! 매우 흥미롭고 유익합니다. 아쉽게도 MQL5DLL Test.mq5 스크립트를 적용하지 못했습니다. 기사에 쓰여진대로 모든 것을했습니다. 그러나 스크립트를 실행했을 때 MT 5는 난파선처럼 닫혔습니다. 뭐가 문제인지 모르겠어 축 때문일까요? MS 비스타 x64가 있습니다. 솔루션을 제안해주세요 :-)

전체 기사를 다시 읽으십시오.

DLL 내부에는 오류를 삭제하지 않고 터미널에서 이 오류를 후속적으로 catch하는 오류 생성(0 주소에 쓰기)에 대한 장소가 있습니다. fnCrashTest 메서드에 대한 호출을 주석 처리해야 합니다.

오늘 저는 Vista x64에서 이 코드를 확인할 것입니다. 아마도 우리의 실수일 것입니다.

 
Renat писал(а) :

전체 기사를 다시 읽으십시오.

DLL 내부에는 오류를 삭제하지 않고 터미널에서 이 오류를 후속적으로 catch하는 오류 생성(0 주소에 쓰기)에 대한 장소가 있습니다. fnCrashTest 메서드에 대한 호출을 주석 처리해야 합니다.

오늘 저는 Vista x64에서 이 코드를 확인할 것입니다. 아마도 우리의 실수일 것입니다.

예, 나는 모든 것을 한 번 이상 신중하게 읽었습니다 :-))

MQL5DLL Test.mq5 스크립트에서 fnCrashTest(int arr) 함수를 주석 처리했다고 말하는 것을 잊었습니다. 그리고 여전히 충돌이 발생합니다. :-(

이것이 어떻게 생겼는지입니다. 아니면 dll 코드에서 fnCrashTest(int arr) 함수를 주석 처리해야 합니까?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed( int &res1, double &res2);
void fnFillArray( int &arr[], int arr_size);
void fnReplaceString( string text, string from, string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) 터미널 버전이 32비트인지 64비트인지?

2) 32비트 또는 64비트 버전의 dll은 무엇입니까?