我们首先定义下面的结构,
- #define BUFFER_SIZE MAX_PATH*4
- // struct for loading report
- typedef struct _REPORT_INFO
- {
- TCHAR reportFile[BUFFER_SIZE];
- TCHAR schemaFile[BUFFER_SIZE];
- TCHAR tablesFile[BUFFER_SIZE];
- TCHAR dataXmlFile[BUFFER_SIZE];
- TCHAR outputFile[BUFFER_SIZE];
- }REPORT_INFO,*PREPORT_INFO;
注意REPORT_INFO结构中的字符为字符数组,这样可以保证数据可以跨进程正确的传递,如果我们把REPORT_INFO修改为下面的样子:
- // struct for loading report
- typedef struct _REPORT_INFO
- {
- TCHAR* reportFile;
- TCHAR* schemaFile;
- TCHAR* tablesFile;
- TCHAR* dataXmlFile;
- TCHAR* outputFile;
- }REPORT_INFO,*PREPORT_INFO;
这样的数据结构在进程内是可以的,可以正确传递,但是如果是跨进程SendMessage,里面的reportFile等成员的内容不能正确传递。
- void SendMessage(TCHAR* reportFileName)
- {
- REPORT_INFO info;
- ZeroMemory( &info, sizeof(info) );
- ::wcscpy_s(info.reportFile,BUFFER_SIZE,(TCHAR*)reportFileName);
- COPYDATASTRUCT copy_struct;
- ZeroMemory( ©_struct, sizeof(copy_struct) );
- copy_struct.lpData = &info;
- copy_struct.dwData = 0;
- copy_struct.cbData = sizeof(info);
- ::SendMessage((HWND)hwnd,WM_COPYDATA,(WPARAM)NULL,(LPARAM)©_struct);
- }