﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-叽哩咕噜——j2EE-随笔分类-个人总结</title><link>http://www.blogjava.net/wangxunhua/category/39652.html</link><description>君子如玉,上善若水</description><language>zh-cn</language><lastBuildDate>Wed, 24 Aug 2011 10:51:32 GMT</lastBuildDate><pubDate>Wed, 24 Aug 2011 10:51:32 GMT</pubDate><ttl>60</ttl><item><title>RCP入门程序的要点.</title><link>http://www.blogjava.net/wangxunhua/archive/2011/08/24/357196.html</link><dc:creator>叽哩咕噜</dc:creator><author>叽哩咕噜</author><pubDate>Wed, 24 Aug 2011 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/wangxunhua/archive/2011/08/24/357196.html</guid><wfw:comment>http://www.blogjava.net/wangxunhua/comments/357196.html</wfw:comment><comments>http://www.blogjava.net/wangxunhua/archive/2011/08/24/357196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxunhua/comments/commentRss/357196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxunhua/services/trackbacks/357196.html</trackback:ping><description><![CDATA[关于RCP程序开发,当写第一个Demo时的要点.记录下来.写得粗糙,仅供自己参考<br /><strong>1.&nbsp;&nbsp;&nbsp; Action</strong><br /><div> <div>&nbsp;&nbsp;&nbsp; 1&gt; ApplicationActionBarAdvisor类的makeActions方法用来初始化Action,可以是内部定义的Action,也可以是自己从Action类继承的自定义Action.<br /> &nbsp;&nbsp;&nbsp; 2&gt;从Action类继承的Action重写run方法,这是Action执行时候运行的代码.<br />&nbsp;&nbsp;&nbsp; 3&gt;内置Action 都实现了IWorkbenchAction,用ActionFactory.QUIT.create获得Action.<br /> &nbsp;&nbsp;&nbsp;  3&gt;相比Delphi,JFace的Action类更简单,把他放在menubarManager上,他就变成了一个菜单,把他放在 ToolbarManager上就变成了工具图标.delphi里面一个菜单是一个menuItem + Action组成的.工具栏是Button +  Action组成的.</div> </div><br /><strong>2.&nbsp;&nbsp;&nbsp; 菜单:</strong><br /><div>&nbsp;&nbsp;&nbsp; 1&gt;menubarManager 相当于有主菜单,如文件,编辑等菜单项.menubarManger.add(menubarManager).这样产生二级菜单.<br />&nbsp;&nbsp;&nbsp; 2&gt;menubarManager.add(Action).这样就添加了一个子菜单.<br />&nbsp;&nbsp;&nbsp; 3&gt;fillMenuBar(IMenuManager menuBar) 方法传进来的menuBar就是最顶端的菜单面板.相当于delphi里面添加了一个XPMenu控件,会在form上增加一条菜单面板.menuBar.add(menubarManager),这样添加了一级菜单.<br /><strong><br />3.&nbsp;&nbsp;&nbsp; 工具栏</strong><br />&nbsp;&nbsp;&nbsp; 1&gt;重写fillCoolBar(ICoolBarManager coolBar) 可以添加工具栏.<br />&nbsp;&nbsp;&nbsp; 2&gt;创建一个ToolbarManager实例.就是一个工具栏.可以创建多个.<br />&nbsp;&nbsp;&nbsp; 3&gt;ToolbarManager.add(Action).这样就是添加了一个工具图标.<br />&nbsp;&nbsp;&nbsp; 4&gt;coolBar.add(ToolbarManager),就是在界面上添加一块工具栏,可以增加多块工具栏.</div><strong>4.View社图</strong><br />&nbsp;&nbsp;&nbsp; 1&gt;可以从扩展点配置一个Action: 从plugin.xml的Extension标签,点add,找出views<br />&nbsp;&nbsp;&nbsp; 2&gt;也可以从ViewPart继承一个类.createPartControl方法设置一些初始化工作.<br />&nbsp;&nbsp;&nbsp; 3&gt;View可以理解为Delphi的childwindow,子窗口,可以放各种控件,可以关闭,最大化,最小化.<br />&nbsp;&nbsp;&nbsp; 4&gt;View的显示是依赖一个透视图的.透视图可以理解为不同的View或Editor的组合,就叫透视图.<br />&nbsp;&nbsp;&nbsp; 5&gt;重写Perspective默认透视图createInitialLayout方法,并用layout.addView添加并显示一个视图.当加载默认视图时会加载该View窗口.<br /><br /><strong>5.Editor编辑器</strong><br />&nbsp;&nbsp;&nbsp; 1&gt;Editor类实现了ISaveablePart接口.并绑定了内置的Save Action,SaveAsAction<br />&nbsp;&nbsp;&nbsp; 2&gt;当点击菜单中的保存 Action时会自动调用doSave方法.只要重写doSave方法保存当前的文件即可实现保存.<br />&nbsp;&nbsp;&nbsp; 3&gt;Editor依赖了一个EditorInput类,EditorInput类我理解为像Struts中的ActionForm类一样,用来传递参数给Editor.<br />&nbsp;&nbsp;&nbsp; 4&gt;如果不是需求这种集成编辑器的功能,一般用View可以满足,但是如像QQ聊天这样的编辑框的时候,用Editor开发应该是一个不错的选择.delphi里面像发送消息程序,采用了一个HtmlEdit控件才解决了这个问题.<br />&nbsp;&nbsp;&nbsp; 5&gt;Editor窗口可以用window.getActivePage.openEditor(input, TxtEditor.ID)打开.<img src ="http://www.blogjava.net/wangxunhua/aggbug/357196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxunhua/" target="_blank">叽哩咕噜</a> 2011-08-24 16:09 <a href="http://www.blogjava.net/wangxunhua/archive/2011/08/24/357196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于"截断字符串或二进制数据"错误</title><link>http://www.blogjava.net/wangxunhua/archive/2011/08/16/356627.html</link><dc:creator>叽哩咕噜</dc:creator><author>叽哩咕噜</author><pubDate>Tue, 16 Aug 2011 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/wangxunhua/archive/2011/08/16/356627.html</guid><wfw:comment>http://www.blogjava.net/wangxunhua/comments/356627.html</wfw:comment><comments>http://www.blogjava.net/wangxunhua/archive/2011/08/16/356627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxunhua/comments/commentRss/356627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxunhua/services/trackbacks/356627.html</trackback:ping><description><![CDATA[<div>公司一个很古老的系统,忽然出现了一个如下的错误:</div><img alt="" src="http://www.blogjava.net/images/blogjava_net/wangxunhua/未命名.jpg" width="354" height="241" /><br /><br />查看了代码,执行了一个存储过程主要执行了Insert语句. 把几个Insert语句的相关字段的长度一对比发现有长度不相符,更改相关的长度.问题搞定.<img src ="http://www.blogjava.net/wangxunhua/aggbug/356627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxunhua/" target="_blank">叽哩咕噜</a> 2011-08-16 14:42 <a href="http://www.blogjava.net/wangxunhua/archive/2011/08/16/356627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi CreateThread 创建多线程的写法</title><link>http://www.blogjava.net/wangxunhua/archive/2010/09/01/330606.html</link><dc:creator>叽哩咕噜</dc:creator><author>叽哩咕噜</author><pubDate>Wed, 01 Sep 2010 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/wangxunhua/archive/2010/09/01/330606.html</guid><wfw:comment>http://www.blogjava.net/wangxunhua/comments/330606.html</wfw:comment><comments>http://www.blogjava.net/wangxunhua/archive/2010/09/01/330606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxunhua/comments/commentRss/330606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxunhua/services/trackbacks/330606.html</trackback:ping><description><![CDATA[<p><strong>function CreateThread(lpThreadAttributes: Pointer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwStackSize: DWORD;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpStartAddress: TFNThreadStartRoutine;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpParameter: Pointer; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwCreationFlags: DWORD; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var lpThreadId: DWORD): THandle; stdcall;</strong></p>
<p><strong>其中lpStartAddress，lpParameter，lpThreadId三个参数是必须的。<br />
lpStartAddress参数指向的是线程执行体ThreadProc的开始地址；<br />
lpParameter指针类型，线程的传入参数，我们如果想给线程执行体ThreadProc传递我们自己的数据，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就要通过它了；<br />
lpThreadId返回创建线程ID,这是我们控制线程必须的。</strong></p>
<br />
<br />
主要说lpStartAddress和lpParameter这两个参数.. <br />
lpStartAddress主开始的地址.说明这是个指针.一般传一个方法的地址进去.. 也就是我们要执行的一段代码.<br />
lpParameter就是参数.我们自己要执行的方法肯定会有参数的. 一般都是传一个Record类型的指针.<br />
<br />
下面复制一个我的Demo例子:<br />
<p>unit CreateThreadFrm;</p>
<p>interface</p>
<p>uses<br />
&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br />
&nbsp; Dialogs, StdCtrls;<br />
type<br />
&nbsp; MyParam = record&nbsp;&nbsp;&nbsp; //线程的时候传递<br />
&nbsp;&nbsp;&nbsp; str:string;<br />
&nbsp; end;<br />
&nbsp; PMyParam=^MyParam; //Record类型指针<br />
&nbsp;&nbsp; procedure CallAgent(msg: PMyParam);stdcall;&nbsp; //这个方法声明为什么要放在这里就可以,放在类TForm1里面就不行.<br />
type<br />
&nbsp; TForm1 = class(TForm)<br />
&nbsp;&nbsp;&nbsp; Button1: TButton;<br />
&nbsp;&nbsp;&nbsp; procedure Button1Click(Sender: TObject);</p>
<p><br />
&nbsp; private<br />
&nbsp;&nbsp;&nbsp; { Private declarations }<br />
&nbsp; public<br />
&nbsp;&nbsp;&nbsp; { Public declarations }<br />
&nbsp; end;</p>
<p>var<br />
&nbsp; Form1: TForm1;</p>
<p>implementation</p>
<p>{$R *.dfm}</p>
<p>{<br />
发送消息给消息弹出代理程序&nbsp;&nbsp; POPAgent.exe<br />
DDZ<br />
2010年8月28日14:44:36<br />
}</p>
<p>procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
&nbsp; PMyPara:PMyParam;<br />
&nbsp; MyPara:MyParam;<br />
&nbsp; Cthread: THandle;&nbsp;&nbsp; //线程句柄<br />
&nbsp; Tid: DWord;<br />
begin<br />
&nbsp; new(PMyPara) ;&nbsp;&nbsp; //另外这里还有一个问题,这里只New开辟类型,并没有FreeMem会不会漏了<br />
&nbsp; PMyPara.str := 'h太低发出来';<br />
&nbsp; Cthread:=CreateThread(nil,0,@CallAgent,PMyPara,0,Tid); //创建一个线程，同时调用线程函数<br />
end;</p>
<p>procedure CallAgent(msg: PMyParam);stdcall;<br />
var<br />
&nbsp; HlAgent:HWND;<br />
&nbsp; ds:TCopyDatastruct;<br />
&nbsp; AgentMsg:string;<br />
begin<br />
&nbsp; <br />
&nbsp; //showmessage(msg^.str);<br />
&nbsp; AgentMsg := msg.str;<br />
&nbsp; //Application.ProcessMessages;<br />
&nbsp; ds.cbData := Length(AgentMsg)+1;<br />
&nbsp; GetMem(ds.lpData,ds.cbData); //分配内存<br />
&nbsp; StrCopy(ds.lpData,PChar(AgentMsg)); //复制值到指针</p>
<p>&nbsp; HlAgent :=FindWindow('TmsgpopMainCaller','调用者');<br />
&nbsp; if&nbsp; HlAgent &lt;&gt; 0 then<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; SendMessage(HlAgent,WM_COPYDATA,0,Cardinal(@ds));<br />
&nbsp; end;<br />
&nbsp; FreeMem(ds.lpData); //释放内存&nbsp; 这里要释放, 上面的Record记录要不要释放 呢.我这样写会报错的<br />
end;</p>
<p>end.<br />
<br />
<br />
<br />
看这个例子可以参考&nbsp;&nbsp; CreateThread&nbsp;函数与.线程间的通信方法.这两个技术点.</p>
<br />
<br />
<br />
<br />
<br />
<br />
<br /><img src ="http://www.blogjava.net/wangxunhua/aggbug/330606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxunhua/" target="_blank">叽哩咕噜</a> 2010-09-01 18:46 <a href="http://www.blogjava.net/wangxunhua/archive/2010/09/01/330606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>delphi 进程间通信的两种方法</title><link>http://www.blogjava.net/wangxunhua/archive/2010/08/31/330446.html</link><dc:creator>叽哩咕噜</dc:creator><author>叽哩咕噜</author><pubDate>Tue, 31 Aug 2010 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/wangxunhua/archive/2010/08/31/330446.html</guid><wfw:comment>http://www.blogjava.net/wangxunhua/comments/330446.html</wfw:comment><comments>http://www.blogjava.net/wangxunhua/archive/2010/08/31/330446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxunhua/comments/commentRss/330446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxunhua/services/trackbacks/330446.html</trackback:ping><description><![CDATA[<br />
<br />
WIN下面进程间通信的最常用办法就是消息了.<br />
<br />
下面记录两种消息通信的方式:<br />
&nbsp;--------------------------------------------------------------------------------------------<br />
一.第一种办法,利用注册Windows全局的消息.并覆盖wndProc过程来监听消息处理.<br />
1. <br />
&nbsp;&nbsp;&nbsp; 发送消息方:<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strWM:Cardinal;&nbsp;&nbsp;//定义一个局部变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;proccedure Form1.Create(sender:TObject);<br />
&nbsp;&nbsp;&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strWM:= RegisterWindowMessage('newspopMessage'); //注册一个windows全局消息,通过这个消息与其它进程通信<br />
&nbsp;&nbsp;&nbsp;&nbsp;end;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;&nbsp;&nbsp;procedure Form1.Button1Click1(Sender:TObject);<br />
&nbsp;&nbsp;&nbsp;&nbsp;var<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h:Cardinal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//通信的步骤得先找到要通信的信息窗口Handle<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h:=findWindow('目标进程窗口类名','窗口Caption');&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送消息消息类型为自定义的strWM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(h,strWM,0,0);&nbsp;&nbsp;//这里同样可以带参数.wParam,lParam.但我传一个PChar,读取的时候总报错.不知道为啥<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
2.&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;接收消息方:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strWM:Cardinal;&nbsp;&nbsp;//定义一个局部变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure wndProc(var msg:Tmessage);override; //覆盖这个方法,可以监听所有的Windows消息<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 24px; font-family: arial; font-size: 14px; font-weight: bold" class="Apple-style-span">回调函数</span></span>&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proccedure Form1.Create(sender:TObject);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strWM:= RegisterWindowMessage('newspopMessage'); //注册一个windows全局消息,这个相当于暗号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procecure form1.wndProc(var msg:TMessage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在这里处理这个消息就行了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showmessage(strpas(PChar(mes.lparam)));&nbsp;//这样写会报错的.但可以处理其它无参数的事情<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />
<br />
<br />
----------------------------------------------------------------------------------------------<br />
二.第二种办法,发送一个WM_COPYDATA的消息.并且可以带一个TCopyDataStruct的结构类型参数.<br />
<br />
&nbsp;1.&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;发送消息方:<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<p>&nbsp;</p>
<p>&nbsp;&nbsp;procedure TMainForm.CallAgent(msg: string);<br />
&nbsp;&nbsp;var<br />
&nbsp;&nbsp;&nbsp; HlAgent:HWND;<br />
&nbsp;&nbsp;&nbsp; ds:TCopyDatastruct;&nbsp;&nbsp;&nbsp; //定义一个TCopyDatastruct结构体变量<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; AgentMsg := msg;<br />
&nbsp;&nbsp;&nbsp; ds.cbData := Length(msg)+1; //结构体的第一个元素: 长度cbData&nbsp;<br />
&nbsp;&nbsp;&nbsp; GetMem(ds.lpData,ds.cbData); //分配内存,结构体的第二个参数:&nbsp; 数据的指针lpDATA<br />
&nbsp;&nbsp;&nbsp; StrCopy(ds.lpData,PChar(msg)); //复制值到结构指针</p>
<p>&nbsp;&nbsp;&nbsp; HlAgent :=FindWindow('TmsgpopMainCaller','调用者');&nbsp; //查找目标窗体的Handle<br />
&nbsp;&nbsp;&nbsp; if&nbsp; HlAgent &lt;&gt; 0 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ShowMessage('主' + IntToStr(Cardinal(@ds)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendMessage(HlAgent,WM_COPYDATA,0,Cardinal(@ds));&nbsp;&nbsp; //发送WM_COPYDATA消息,并带上参数 @ds<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; FreeMem(ds.lpData); //释放数据内存<br />
&nbsp; end;</p>
<p>2.<br />
&nbsp;&nbsp;&nbsp;&nbsp;接收方程序:<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure MyMessage(var m:TWmCopyData);message WM_CopyData;&nbsp;&nbsp; //定义一个消息响应过程,并传入一个TWmCopyData的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;&nbsp;&nbsp;procedure TmsgpopMainCaller.MyMessage(var m: TWmCopyData); //实现响应<br />
&nbsp;&nbsp;&nbsp;&nbsp;var<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg:string;<br />
&nbsp;&nbsp;&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg :=StrPas(m.CopyDataStruct^.lpData);&nbsp;&nbsp;&nbsp; //获取参数数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMessageForm := TShowMessageForm.Create(self,msg);&nbsp; //处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;end;<br />
&nbsp;</p>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /><img src ="http://www.blogjava.net/wangxunhua/aggbug/330446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxunhua/" target="_blank">叽哩咕噜</a> 2010-08-31 18:31 <a href="http://www.blogjava.net/wangxunhua/archive/2010/08/31/330446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>