TIaxEvent = record etype : integer; input : Single; output : Single; text_type : integer; callNo : integer; text_message : TByteArray255; state : integer; remote : TByteArray255; remote_name : TByteArray255; local : TByteArray255; local_context : TByteArray255; end; procedure TIaxClient.WndProc(var MsgRec: TMessage); type PIaxEvent = ^TIaxEvent; var ptrIaxEvent : PIaxEvent; lLengthIaxEvent : longint; // strTemp : string; begin //1304 ShowMessage(IntToStr(sizeof(TIAxEvent))); try if(MsgRec.Msg = WM_IAX) then begin //New(ptrIaxEvent); //.CopyDataStruct.lpData //MoveMemory (ptrIaxEvent, Ptr(MsgRec.LParam), SizeOf(TIaxEvent)); ptrIaxEvent := Ptr(MsgRec.LParam); LogForm.Memo1.Lines.Add(IntToStr(ptrIAXEvent.etype)); struct iaxdll_event { int type; float input; float output; int text_type; int callNo; /* call number for IAX text */ char message[IAXC_EVENT_BUFSIZ]; int state; char remote[IAXC_EVENT_BUFSIZ]; char remote_name[IAXC_EVENT_BUFSIZ]; char local[IAXC_EVENT_BUFSIZ]; char local_context[IAXC_EVENT_BUFSIZ]; }; static int iaxc_callback(iaxc_event e) { iaxdll_event *event; COPYDATASTRUCT MyCDS; /* iaxc_event *copy; copy = (iaxc_event *)malloc(sizeof(iaxc_event)); memcpy(copy, &e, sizeof(iaxc_event)); evt.SetClientData(copy); */ event = (iaxdll_event *)malloc(sizeof(iaxdll_event)); event->type = e.type; if (e.type == IAXC_EVENT_TEXT) { event->text_type = e.ev.text.type; event->callNo = e.ev.text.callNo; strncpy(event->message, e.ev.text.message, (IAXC_EVENT_BUFSIZ - 1)); } else if (e.type == IAXC_EVENT_LEVELS) { event->input = e.ev.levels.input; event->output = e.ev.levels.output; } else if (e.type == IAXC_EVENT_STATE) { event->state = e.ev.call.state; event->callNo = e.ev.call.callNo; strncpy(event->remote, e.ev.call.remote, (IAXC_EVENT_BUFSIZ - 1)); strncpy(event->remote_name, e.ev.call.remote_name, (IAXC_EVENT_BUFSIZ - 1)); strncpy(event->local, e.ev.call.local, (IAXC_EVENT_BUFSIZ - 1)); strncpy(event->local_context, e.ev.call.local_context, (IAXC_EVENT_BUFSIZ - 1)); } MyCDS.cbData = sizeof(iaxdll_event); MyCDS.lpData = (void *)event; MyCDS.dwData = 1; PostMessage(main_handle, WM_USER + 201, (WPARAM) NULL, (LPARAM) &MyCDS); return 1; }