Skip to content

Instantly share code, notes, and snippets.

@igotit-anything
Last active September 6, 2024 09:48
Show Gist options
  • Save igotit-anything/c9e844aaa2f6e9927ac0aa5debd935db to your computer and use it in GitHub Desktop.
Save igotit-anything/c9e844aaa2f6e9927ac0aa5debd935db to your computer and use it in GitHub Desktop.
/*
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
@igotit-anything
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment