2017-05-21 39 views
0

我已經通過PostThreadMessage發送消息到所需的螺紋,並在參數lparam我通過存儲器編輯部地址的struct我要發送:接收消息結構類型,然後ASIGN到另一個相同結構

struct myStruct estructura; 
PostThreadMessage(p->idHilo, WM_USER, 10 , (LPARAM)&estructura); 

當我收到我這樣做:

struct estructura *e; 
while(GetMessage(&mensaje, NULL, WM_USER, WM_USER+2)){ 
    e = &mensaje.lParam; 
    printf("%c\n",e->miCaracter); 
} 
+0

爲什麼用過程標籤標記?你在做這個跨進程嗎? – Anders

回答

0

e = &mensaje.lParam是錯誤的,它應該是e = (estructura*) mensaje.lParam;但它仍然不會可靠地工作。

您不能消息到另一個線程與指向堆棧上的東西,因爲堆棧可能會消失/更改時,其他線程檢索該消息。

相反,你應該使用這些替代方法之一:

  • 創建一個窗口,以便您可以使用SendMessage
  • 在堆上分配結構,讓其他線程釋放它
  • 使該結構一全球

如果線程在另一個進程中,那麼您可以創建一個命名文件映射。

+0

我有cheked e =(estructura *)mensaje.lParam;但它在任何情況下都不起作用。 – Alber

+0

@Alber是的,因爲如果你沒有采取措施來阻止它,它就消失了。你應該使用Anders列出的三種可能性中的哪一種?我會和'分配堆上的結構,讓其他線程釋放它'。 – ThingyWotsit