MQL5에는 항상 위업을 위한 장소가 있습니다! ;) - 페이지 5

 
sergeev :

할 것 같지 않은. OBJ_TEXT 를 통해 메가바이트 정보를 푸시할 수 없습니다.

가장 가까운 후보 - 자원

점은 실제로 다른 유형의 변수로 채워진 구조입니다. 터미널을 닫거나 열 때 저장되며 템플릿에도 저장됩니다.

 
DC2008 :

점은 실제로 다른 유형의 변수로 채워진 구조입니다. 터미널을 닫거나 열 때 저장되며 템플릿에도 저장됩니다.

?
 
sergeev :

모든 것을 묻고 싶지만 이미 DLL 32/64에 대한 솔루션을 찾았습니까?

Windows(\System32\)에는 일종의 WOW32reg.exe가 있습니다. -h -? 아무 반응도 하지 않고 맹목적으로 등록해서 아무 것도 할 수 없었습니다.

Google은 또한 조용하고 microsoft.com에서 아무 것도 찾지 못했습니다. 일반적으로 이것은 실제 문제입니다.

 
sergeev :
?

무엇을 이해하지 못합니까? 특정 작업을 지정합시다. 그렇지 않으면 주변의 모든 것이 ...

 
MetaDriver :

모든 것을 묻고 싶지만 이미 DLL 32/64에 대한 솔루션을 찾았습니까?

Windows(\System32\)에는 일종의 WOW32reg.exe가 있습니다. -h -? 반응하지 않고 맹목적으로 등록하고 아무 것도 할 수 없습니다.

Google은 또한 조용하고 microsoft.com에서 아무 것도 찾지 못했습니다. 일반적으로 이것은 실제 문제입니다.

그래서, 단지 아이디어, 나는 그것을 직접 시도하지 않았습니다. 단말의 bitness를 결정한 후, LoadLibrary를 통한 DLL의 동적 로딩을 이용한다.

 
MetaDriver :

모든 것을 묻고 싶지만 이미 DLL 32/64에 대한 솔루션을 찾았습니까?

그리고 여기서 문제가 무엇입니까?

가져오기 에서 매개변수(int/long)만 다른 두 개의 동일한 함수를 지정합니다. 프로그램에서 비트 깊이 32/64에 따라 적절한 함수를 호출합니다.

 
MetaDriver :

모든 것을 묻고 싶지만 이미 DLL 32/64에 대한 솔루션을 찾았습니까?

창에서 함수를 호출 하기 위해 (포인터를 전달할 때) - 찾았습니다.

컨텍스트 덕분에 :: 모든 것이 깔끔하게 해결되었습니다.


유리히 :

가져오기에서 매개변수(int/long)만 다른 두 개의 동일한 함수를 지정합니다. 프로그램에서 비트 깊이 32/64에 따라 적절한 함수를 호출합니다.


예를 들면 다음과 같습니다.

 #import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if ( _IsX64 ) return (MemMap64::MemRead(h, v, pos, sz, error)); return (MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
코드에서 명시적 :: 컨텍스트로 호출합니다.

::멤리드(...)


즉, 우리는 함수 이름을 생성하지 않지만 비트의 자동 감지를 수행하고 가져온 올바른 이름을 호출합니다.

 
MetaDriver :

모든 것을 묻고 싶지만 이미 DLL 32/64에 대한 솔루션을 찾았습니까?

가장 쉬운 방법은 같은 이름의 x32 및 x64 DLL을 서로 다른 Windows 시스템 디렉토리(각각 SysWOW64 및 System32)에 넣는 것입니다.

그러나 프로그램 간 데이터 교환 은 IMHO가 정말 문제입니다. 특히 우연히 접근하면 더욱 그렇습니다.
Microsoft는 지난 세기의 90년대에 파일에서 개체로 스트리밍 교환 - OLE에서 ActiveX -> COM -> COM+ -> .NET으로 전환했을 때도 이런 식으로 추론했을 것입니다. 프로그램 간 교환 기술을 기반으로 새로운 프로그래밍 및 코드 실행 시스템이 만들어졌습니다.

 
Yurich :

그리고 여기서 문제가 무엇입니까?

가져오기에서 매개변수(int/long)만 다른 두 개의 동일한 함수를 지정합니다. 프로그램에서 비트 깊이 32/64에 따라 적절한 함수를 호출합니다.

32비트를 전혀 로드하고 싶지 않으며 더 이상 (dll) 호출하지 않더라도 프로그램을 실행하고 싶지 않습니다.

" DLL 사용 허용 " 체크박스를 해제하면 [확인] 버튼이 전혀 표시되지 않고 취소만 됩니다. 허용하고 확인을 누릅니다. 프로그램이 충돌합니다. 막 다른 골목.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


일반적으로 이상적으로는 x64 터미널에서 dll32를 호출할 수 있기를 원합니다. 이론적으로 가능한 것이 무엇인지 정확히 알고 있습니다. 방법 을 모르겠습니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver :

32비트를 전혀 로드하고 싶지 않으며 더 이상 (dll) 호출하지 않더라도 프로그램을 실행하고 싶지 않습니다.

" DLL 사용 허용 " 체크박스를 해제하면 [확인] 버튼이 전혀 표시되지 않고 취소만 됩니다. 허용하고 확인을 누릅니다. 프로그램이 충돌합니다. 막 다른 골목.


일반적으로 이상적으로는 x64 터미널에서 dll32를 호출할 수 있기를 원합니다. 이론적으로 가능한 것이 무엇인지 정확히 알고 있습니다. 방법 을 모르겠습니다.

방금 확인:
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
라이브러리가 로드되지 않았지만 해당 함수가 호출될 때까지 모든 것이 작동합니다(TEST 출력).

이제 우리는 그러한 라이브러리의 기능을 호출합니다:
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version