Last active
September 6, 2024 09:48
-
-
Save igotit-anything/c9e844aaa2f6e9927ac0aa5debd935db to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
MetaTrader5 language MQL5 | |
- Only for 64bit environment | |
file : CCy_IPC_SendCopyData_1.mqh | |
author : igotit . https://igotit.tistory.com | |
*/ | |
#include "CCy_IPC_WindowMessage_1.mqh" | |
#define WM_COPYDATA 0x004A | |
/* 윈도우 API 에서의 COPYDATASTRUCT 정의 | |
typedef struct tagCOPYDATASTRUCT { | |
ULONG_PTR dwData; // 데이터 식별자 . 32bit 4byte, 64bit 8byte | |
DWORD cbData; // 데이터 크기 (바이트 단위) 4byte, 64bit 8byte | |
PVOID lpData; // 데이터 포인터 . 32bit 4byte, 64bit 8byte | |
} COPYDATASTRUCT, *PCOPYDATASTRUCT; | |
*/ | |
//중요. 아래 자료형은 상기 tagCOPYDATASTRUCT 멤버변수의 64비트 실행환경에서의 바이트 사이즈로 한것. | |
struct COPYDATASTRUCT | |
{ | |
long dwData; // 8byte . 데이터 식별 | |
long cbData; // 8byte . lpData 의 바이트 사이즈. 64비트에서 int 로 하면 절대 안됨. | |
long lpData; // 8byte . 데이터 포인터. | |
}; | |
#import "msvcrt.dll" | |
long memmove(COPYDATASTRUCT & dest,COPYDATASTRUCT & src, long n); // memmove 반환값은 dest 의 포인터. void *memmove(void *dest, const void *src, size_t n); | |
#import | |
class CCy_SendCopyData | |
{ | |
private: | |
CCy_WindowMessage m_CCyWindowMessage; // SendMessage 활용위함. | |
COPYDATASTRUCT m_CDS; | |
long m_pCDS; // m_CDS 의 포인터. | |
public: | |
CCy_SendCopyData(string name_wnd_tgt) | |
:m_CCyWindowMessage(name_wnd_tgt,WM_COPYDATA) | |
{ | |
// 주요개념 : m_CDS 의 포인터를 SendMessage 의 2번 lParam 에 m_CDS 포인터 전달해야하는데, | |
// mql5 에서는 구조체 포인터 받는 수단 제공 안되므로 memmove 함수 반환값이 1번 인자의 포인터임을 활용. | |
m_pCDS = memmove(m_CDS, m_CDS, 0); | |
} | |
~CCy_SendCopyData(){} | |
void SendMessage(long wparam,long cds_cwdata, int cds_cbdata, long cds_lpdata) | |
{ | |
m_CDS.dwData = cds_cwdata; // 데이터 식별용. 사용자가 임의 정의. | |
m_CDS.cbData = cds_cbdata; // 데이터 사이즈 m_CDS.lpData 로 전달하려는 데이터의 바이트 사이즈 | |
m_CDS.lpData = cds_lpdata; // 데이터 포인터 | |
m_CCyWindowMessage.SendMessage( | |
wparam //long wparam | |
,m_pCDS //long lparam | |
); | |
} | |
};//class CCy_SendCopyData |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://igotit.tistory.com/5820