2014-12-05 4 views
0

Из моего старого приложения (работает под отдельным процессом) Посылаю двойные значения в объекте, как этотПреобразовать IntPtr на объект C#

#define MYMESSAGECODE (WM_APP + 123) 
typedef struct 
{ 
    float f; 
    double d; 
} MyDataStruct; 

MyDataStruct data; 
data.f = 1.0; 
data.d = 2.0; 
pWpfWnd->SendMessage(MYMESSAGECODE, 0, (LPARAM) &data); 

Это принимается в WndProc в отдельном процессе Понравился

private IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
     switch (msg) 
     { 
      case GA_SLOT_COORDINATES: 
      // Need solution here to convert lParam to MyDataStruct 
     } 
     return IntPtr.Zero; 
} 

Я хочу преобразовать данные, переданные в lParam из моего унаследованного приложения, на тот же объект в моем. Net-приложении, запущенном под другим процессом. Как я могу это достичь? Благодаря!!

ответ

1

Если вы работаете внутри процесса, то Marshal.PtrToStructure поможет вам.

Кажется, вы пытаетесь сделать это через весь процесс, это невозможно. Ваш LParam является указателем на память в другом процессе, вы не можете обмениваться памятью именно так. Вы должны использовать любой метод Inter process communication. Взгляните на Wm_CopyData.

Смежные вопросы