E Emmyling Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #1 别人用vc做了个dll给我用delphi调用,在dll中他把我需要的数据用sendmessage发出,<br>LParam是指向字符串的地址,请问如何从LParam中取得数据。请大家帮忙
E Emmyling Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #2 别人用vc做了个dll给我用delphi调用,在dll中他把我需要的数据用sendmessage发出,<br>LParam是指向字符串的地址,请问如何从LParam中取得数据。请大家帮忙
C chenybin Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #3 我以前写的一个例子,供参考<br><br>TInfo = record<br> nPos, nTotal: Integer;<br> end;<br><br>procedure TForm1.Info(var msg: TMessage);<br>var<br> P : TInfo;<br>begin<br> if msg.Msg = WM_Info then begin<br> p := TInfo(Pointer(msg.LParam)^);<br>// 用Pointer(msg.LParam)^ 取出来,然后用一个结构体强制类型转换,这里根据自己的需要,看它传的是什么,也可以把VC的消息发送的代码放上来看<br> ProgressBar1.Max := p.nTotal;<br> ProgressBar1.Min := 0;<br> ProgressBar1.Position := p.nPos;<br> end;<br>end;<br><br>发送消息代码如下<br><br>procedure TMyThread.Execute;<br>var<br> p : TInfo;<br>begin<br> while not Terminated do begin<br> if nPos < nTotal then begin<br> p.nPos := nPos;<br> p.nTotal := nTotal;<br> Inc(nPos);<br> if FMainHandle <> 0 then<br> SendMessage(FMainHandle, WM_Info, 0, Integer(@P));<br> end;<br> end;<br>end;
我以前写的一个例子,供参考<br><br>TInfo = record<br> nPos, nTotal: Integer;<br> end;<br><br>procedure TForm1.Info(var msg: TMessage);<br>var<br> P : TInfo;<br>begin<br> if msg.Msg = WM_Info then begin<br> p := TInfo(Pointer(msg.LParam)^);<br>// 用Pointer(msg.LParam)^ 取出来,然后用一个结构体强制类型转换,这里根据自己的需要,看它传的是什么,也可以把VC的消息发送的代码放上来看<br> ProgressBar1.Max := p.nTotal;<br> ProgressBar1.Min := 0;<br> ProgressBar1.Position := p.nPos;<br> end;<br>end;<br><br>发送消息代码如下<br><br>procedure TMyThread.Execute;<br>var<br> p : TInfo;<br>begin<br> while not Terminated do begin<br> if nPos < nTotal then begin<br> p.nPos := nPos;<br> p.nTotal := nTotal;<br> Inc(nPos);<br> if FMainHandle <> 0 then<br> SendMessage(FMainHandle, WM_Info, 0, Integer(@P));<br> end;<br> end;<br>end;
E Emmyling Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #4 我试了这个方法但是强制转换报错<br>vc的sendmessage是SendMessage( hStatuWnd, SB_SETBKCOLOR, 0, 0x0000FF00);SendMessage( hStatuWnd, SB_SETTEXT, (WPARAM)(0),(LPARAM)aucBuf );<br>aucBuf是字符串型,这样的应该怎么去取值呢
我试了这个方法但是强制转换报错<br>vc的sendmessage是SendMessage( hStatuWnd, SB_SETBKCOLOR, 0, 0x0000FF00);SendMessage( hStatuWnd, SB_SETTEXT, (WPARAM)(0),(LPARAM)aucBuf );<br>aucBuf是字符串型,这样的应该怎么去取值呢
C chenybin Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #5 aucBuf是一个char * 类型的吗?还是char的数组,如果是char *的,可以用<br><br>PChar(msg.LParam)^; <br><br>然后用function StrPas(const Str: PChar): string; 这个函数来取,大概是这样,不烦把aucBuff的相关代码也放上来看看<br><br>这种问题lichengbin大虾很厉害
aucBuf是一个char * 类型的吗?还是char的数组,如果是char *的,可以用<br><br>PChar(msg.LParam)^; <br><br>然后用function StrPas(const Str: PChar): string; 这个函数来取,大概是这样,不烦把aucBuff的相关代码也放上来看看<br><br>这种问题lichengbin大虾很厉害
E Emmyling Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #6 TCHAR aucBuf[60];<br>strcpy( &aucBuf[strlen(aucBuf)], TEXT("年 /0" );<br>就是这样用的,我用pchar过,取出来为空
TCHAR aucBuf[60];<br>strcpy( &aucBuf[strlen(aucBuf)], TEXT("年 /0" );<br>就是这样用的,我用pchar过,取出来为空
C chenybin Unregistered / Unconfirmed GUEST, unregistred user! 2005-09-14 #7 感觉自己在误人子弟[]<br><br>第一个,看直接设置一个char的数组,然后用上面的方法读取<br><br>第二,在spcomm读取数据里面有个经典的例子,看看对你有用没有,也就是把Buffer这个指针直接转成了char的数组,再不行就只有等高手了,惭愧<br>procedure TReceiveFrm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;<br> BufferLength: Word);<br>var<br> tmpstr: array [0..2048] of integer;<br> i: integer;<br>begin<br> Move(Buffer^,tmpstr,BufferLength);<br> for i := 0 to BufferLength-1 do<br> Memo1.Lines.Add(char(tmpstr));<br>end;
感觉自己在误人子弟[]<br><br>第一个,看直接设置一个char的数组,然后用上面的方法读取<br><br>第二,在spcomm读取数据里面有个经典的例子,看看对你有用没有,也就是把Buffer这个指针直接转成了char的数组,再不行就只有等高手了,惭愧<br>procedure TReceiveFrm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;<br> BufferLength: Word);<br>var<br> tmpstr: array [0..2048] of integer;<br> i: integer;<br>begin<br> Move(Buffer^,tmpstr,BufferLength);<br> for i := 0 to BufferLength-1 do<br> Memo1.Lines.Add(char(tmpstr));<br>end;