如题!急。
解决方案 »
- TNMStrm和TNMStrmServ 这两个类
- 各位好,關於在DOS下運行,我有個比較急的問題想請教諸位!~~
- 最基础的问题,RM做报表,总页数TOTALPAGE,怎么说要“选择两遍报表”?怎么选??
- 将变量只值加到select 语句中!!!!
- Quick CHM
- 怎样用Delphi实现动态域名解析,我想针对ADSL、拨号上网的用户开发一个软件
- ActiveX Form中有一个按钮,这个FORM在框架网页的上半部,我怎么实现点击按钮打开一个连接出现在网页的下半部分?
- 如何在屏幕或窗口中判断一张图片的出现
- 运行程序出现内存报错的问题!!!求救!!
- 问高手:鼠标移出Form响应什么消息,应该在哪个事件中编程呢?
- 菜鸟入门之一 用什么命令调用WINDOSWS的程序
- 关于combobox的问题
谢谢三位,我先试一下。
var
DataTB : DataInfoTB;
procedure TRecvThread.Execute;
begin
while not Terminated do
if WaitForSingleObject(FEvent.Handle,WaitTime*4)=Wait_Object_0 then
begin
PInsDataRec:=Pointer(FMessage.LParam);
Case PInsDataRec.dwData of
InsData:
begin
DataTable:=DataInfoTB(PInsDataRec.lpData^);
DealData;
if RefreshAlarm then
PostMessage(FrmData.Handle,RecvMessage,0,0);
end;
end;
end;
end;procedure TRecvThread.RecvAllMessage(var Mess: TMessage);
begin
with Mess do
begin
if Msg=WM_CopyData then
begin
FMessage:=Mess;
FEvent.SetEvent;
end else
Result := DefWindowProc(FWinHandle, Msg, WParam, LParam);
end;
end;///////////////定义///////////////////
type DataInfo = record
ddr : Word;
DataTime : TDateTime;
SolveData: array [1..6] of Double;
end;
type DataInfoTB = array [1..5] of DataInfo;//每次是五个数据,前4个正常,最后一个数据不正常。
//////////////////////////// 发送端 ///////////////////////
SendMessage(ProcHandle,WM_CopyData,Handle,LongInt(@SendDataRec));
//其中SendDataRec 为 DataInfoTB类型。
把thread中的代码帖到主线程中接收到的数据就是正常的。
SendDataRec这块内存是什么时候分配的?哪儿分配的?静态?栈?堆?
怀疑问题出在这儿SendMessage(ProcHandle,WM_CopyData,Handle,LongInt(@SendDataRec));
//其中SendDataRec 为 DataInfoTB类型。
如果是这的原因,为什么在主线程中接收正常?
您看上面的代码了吗?估计是哪的问题?
我程序中发送和接收用的都是静态分配的内存,发送和接收的record定义是一样的。而且,在主线程中接收就正常。
》》//其中SendDataRec 为 DataInfoTB类型。SendDataRec不应该是自定义类型的,应该是COPYDATASTRUCT类型。
var
cds:TCopyDataStruct;
data:DataInfoTB;
begin
// SendMessage(ProcHandle,WM_CopyData,Handle,LongInt(@SendDataRec));
cds.dwData:=0;
cds.cbData:=sizeof(data);
cds.lpData:=@data; SendMessage(prohandle,WM_COPYDATA,handle,Longint(@cds));
end;
var
SendDataRec : TCopyDataStruct;
begin
SendDataRec.cbData:=SizeOf(DataInfoTable);
SendDataRec.lpData:=@DataInfoTable;
end;
//DataInfoTable 为 DataInfoTB类型。
WM_COPYDATA 分配的内存空间必须为全局的 不能为某一个进程的 私有空间
在进程间通信用postMessage位什么不行?