좋은 기사이지만 몇 가지 큰 우려를 제기합니다.
5. DLL calls wrapper and loss of speed on calls As already described above, every call of DLL functions is wrapped into a special wrapper in order to ensure safety. This binding masks the basic code, replaces the stack, supports stdcall / cdecl agreements and monitors exceptions within the functions called. This work inevitably leads to delay of the calling function. Therefore, it isn't recommended to perform very frequent DLL function calls (hundreds or thousands of times per second) for small operations. It' s better to make infrequent calls.
저는 애플리케이션에 대한 보호 기능을 추가하는 데 찬성하지만 성능을 희생해서는 안됩니다. 이것은 dll의 예외로 인해 MT4가 충돌하기 때문에 MT4의 또 다른 변화이지만 잘 작성된 코드는이 시나리오를 처리해야하므로 이러한 종류의 문제를 극복하기 위해 dll에서 안전한 코드를 작성하는 기사를보고 싶습니다. 따라서 이제 나쁜 코딩 습관으로 인해 모든 사람이 성능 비용을 지불해야합니다.
틱 기반에서 호출되는 알고리즘 라이브러리가 있는 경우 이는 매우 매우 나쁘며 감히 쓸모 없게 만들 수 있다고 말하고 싶습니다. 내가 본 많은 피드백을 감안할 때 MT5는 대부분 사람들이 지표 등을 다시 작성해야하기 때문에 좋지 않습니다. 이것은 많은 좌절을 유발하는 또 다른 항목이며 성능에 영향을 미치기 때문에 저와 같은 다른 사용자는 DLL을 많이 사용하는 사용자가 가능한 한 오랫동안 MT4에 머물고 문제가없는 다른 플랫폼을 찾을 것이라고 상상할 것입니다.
왜 메타콰이어트는 안전한 방법으로 DLL을 호출하는 약간 다른 방법을 추가하지 않았을까요? 그런 다음 개발자는 안전 로딩 또는 성능 로딩을 통해 로드하고 예외를 잡는 좋은 코드를 작성하도록 선택할 수 있습니다.
"드물게 호출하는 것이 더 낫다"는 말은 정말 무슨 뜻인가요?
비주얼 C++ 익스프레스 2008을 사용하여 dll을 컴파일했지만 흥미롭게도 터미널에서 예외가 발생하지 않고 fnReplaceString 내부에서 충돌이 발생합니다.
내 터미널 빌드는 239입니다. 어떤 단서가 있나요?
Visual C++ Express 2008을 사용하여 dll을 컴파일했지만 흥미롭게도 터미널은 예외를 포착하지 않고 fnReplaceString 내부에서 충돌합니다.
내 터미널 빌드는 239입니다. 어떤 단서가 있나요?
좋은 기사지만 몇 가지 큰 우려를 불러일으킵니다.
저는 애플리케이션에 대한 보호 기능을 추가하는 데 찬성하지만 성능을 희생해서는 안됩니다. 이것은 dll의 예외로 인해 MT4가 충돌하기 때문에 MT4의 또 다른 변화이지만 잘 작성된 코드는이 시나리오를 처리해야합니다. 이러한 종류의 문제를 극복하기 위해 dll에서 안전한 코드를 작성하는 방법에 대한 기사를보고 싶습니다. 이제 나쁜 코딩 습관으로 인해 모두가 성능 비용을 지불해야 합니다.
틱 기반에서 호출되는 알고리즘 라이브러리가 있는 경우 이는 매우 매우 나쁘며, 감히 쓸모 없게 만들 수 있다고 말하고 싶습니다. MT5에 대한 많은 피드백을 감안할 때 대부분 사람들이 지표 등을 다시 작성해야하기 때문에 좋지 않습니다. 이것은 많은 좌절을 일으키는 또 다른 항목 일 뿐이며 성능에 영향을 미치기 때문에 DLL을 광범위하게 사용하는 사용자는 가능한 한 오랫동안 MT4에 머물고 문제가되지 않는 다른 플랫폼을 찾을 것이라고 저와 같은 다른 사람들이 상상할 것입니다.
왜 메타콰이어트는 안전한 방법으로 DLL을 호출하는 약간 다른 방법을 추가하지 않았을까요? 개발자는 안전 로딩 또는 성능 로딩을 통해 로딩하고 예외를 잡는 좋은 코드를 작성하도록 선택할 수 있습니다.
"드물게 호출하는 것이 더 낫다"는 말은 정말 무슨 뜻인가요?
이 커뮤니티에서 제대로 된 글이 나오기 어려운 것은 당연한 일입니다. 어떤 훌륭한 작가라면 여기에 시간을 들여 글을 쓰지 않을 것입니다. 왜 그래야 하나요? 그들은 dll을 통합하고 통신을 설정하는 방법을 보여주는 것과 같은 괜찮은 일을 한 다음 누군가가 나타나서 나무에서 바로 떨어뜨려 버립니다.
제가 보기에 그는 글에서 괜찮은 작업을 했으니 성능은 문제가 없을 수도 있습니다. 하지만 여기서 질문 또는 문제는 그렇게 나쁘고 이 커뮤니티의 일원이라면 왜 명백한 성능 문제로 발견한 것에 대한 해결책을 코딩하려고 시도하지 않느냐는 것입니다.
문제를 제기하는 것은 좋지만, 해결책을 제시하거나 목표를 달성하는 방법에 대한 제안조차 하지 않는다면 누구도 이에 대해 불평할 수 없습니다.
기사에서 위험을 노출했나요? 네, 다른 사람이 다운로드했는데 이런 문제가 발생했다고 말했을 때 우리는 그 샘플을 얻은 것 같습니다. 이것이 바로 기사에서 논의 된 문제입니다.이 기사를 좀 더 확장한다면 PFX에서 말씀하신 것처럼 안전하게 상호 작용하는 방법을 보여줄 수 있을 것 같습니다. 하지만 그는 위험을 노출시켰고, 안전이라는 주제의 개념 자체로 자신과 같은 사람이 확장할 수 있는 여지를 충분히 남겼습니다.
저자에게 개인적으로 한 가지 조언을 드리자면, 주제를 작성할 때 초보자와 같은 용어는 자제해 주세요. 이는 모욕적이고 비하하는 말이며, 자신의 지혜를 따르고자 하는 사람들에 대해 말하는 전문적인 방법이 아닙니다.
C++ dll과 C# dll의 차이점은 무엇인가요?
주요 차이점은 디자인입니다. C# dll 어셈블리는 관리되는 코드를 저장하는 데 사용되며, C++ dll에는 네이티브 코드가 포함되어 있습니다.
하지만 어셈블리 가져오기를 가능하게 하는 트릭이 있는데, 바로 역 P/Invoke입니다.
저 같은 경우에는 이를 위해 c++\cli 래퍼 dll을 작성하거나 c++\cli를 사용하여 모든 관리 코드를 작성하는 데 사용합니다.
C++ 라이브러리로 구조를 가져오는 방법을 보여주시겠어요?
이 코드를 MQL5DLLSample.cpp에 추가하려고 합니다:
------------------------
구조체 MqlTick
{
INT64 Time;
double Bid;
double Ask;
double Last;
UINT64 Volume;
};
_DLLAPI MqlTick __stdcall MyTick(MqlTick &my)
{
my.Bid = 1;
return(my);
}
------------------------
그런 다음 MQL5DLL Test.mq5(가져오기 섹션)에 이 코드를 추가합니다.
MqlTick MyTick(MqlTick &tick);
를 생성하고 OnTick()에서 호출합니다.
MqlTick tick;
SymbolInfoTick("GBPUSD", tick);
MyTick(tick);
Print("My tick: ",tick.bid);
------------------------
C++ 라이브러리와 EA의 컴파일은 오류 없이 진행됩니다.
터미널에서 MyTick(tick) 함수를 호출하면 오류가 발생합니다: MQL5DLL_Test (EURUSD,M1) 액세스 위반 0x00000008에 쓰기
안녕하세요, 유용한 정보를 제공해 주셔서 감사합니다.
mql5와 mysql 간에 데이터를 교환하기 위해 작은 dll을 만들려고 했습니다.
그래서 여러 단계를 따랐지만 몇 가지 오류가 발생했습니다.
dll이 C++로 되어 있습니다.
첫 번째는 minGW를 준수했습니다.
ex5는 64비트 컴파일된 dll이 아니기 때문에 열 수 없습니다.
그래서 minGW 64비트로 컴파일했습니다.
내 첫 번째 dll (매우 간단 함)이 작동합니다.
그것은 약간의 추가 등을 만듭니다.
내 SQL 라이브러리를 사용하려고 할 때 아무런 문제없이 컴파일하여 dll을 빌드 할 수 있습니다.
하지만 ex5를 호출하여 열려고 할 때 다음과 같은 오류가 발생합니다:
C:\user......\DLLNAME.dll을 열 수 없습니다(193).
이 문제를 해결할 수 있는 방법이 있나요?
많은 감사
안녕하세요 여러분,
좋은 기사!
하지만이 기사에서 설명하는 일을 거꾸로하는 데 도움이되는 사람이 있는지 궁금합니다 : 메타 트레이더에서 C ++ 프로그램으로 데이터 (틱 또는 막대 데이터)를 가져 오는 것 ?
표준 int 배열로 이 작업을 해봤는데, Visual Studio C++에 CArrayObj / CArrayDouble을 전달할 수 있나요?
새로운 기고글 데이터 교환 방법: 10 분 안에 MQL5 용 DLL 가 게재되었습니다:
이제 많은 개발자가 간단한 DLL을 작성하는 방법과 다른 시스템 바인딩의 특수 기능이 무엇인지 기억하지 못합니다. 몇 가지 예제를 사용하여 간단한 DLL 생성의 전체 프로세스를 10 분 안에 보여주고 바인딩 구현에 대한 몇 가지 기술적인 세부 사항을 논의하려고 합니다. 다양한 유형의 변수 (숫자, 배열, 문자열 등)를 교환하는 예제와 함께 Visual Studio에서 DLL을 만드는 단계별 프로세스를 보여 드리겠습니다. 게다가 사용자 지정 DLL의 충돌로부터 클라이언트 터미널을 보호하는 방법을 설명합니다.
파일 -> 새로 만들기'메뉴를 사용하여 Win32 응용 프로그램 마법사를 실행하고 프로젝트 유형을 'Visual C++'으로 선택하고 'Win32 콘솔 응용 프로그램'을 선택합니다. '템플릿을 선택하고 프로젝트 이름을 정의합니다 (예: ' MQL5DLLSamples'). 기본 제공되는 디렉토리 대신 '위치'프로젝트를 저장할 루트 디렉토리를 선택하고 '솔루션용 디렉토리 만들기'확인란을 비활성화하고 '확인을 클릭합니다':
작성자: MetaQuotes