yeeler
28047
|
2007/2/10 9:02:27 |
说了这么多 演示代码是干嘛的啊,我是菜鸟, 学习中....... 惭愧 |
wu_yanan2003
23971
|
2006/5/30 10:02:19 |
谢谢指教。 |
riceball
23908
|
2006/5/26 16:38:38 |
to ralf 唉,Delphi 的开发小组没有发挥它们的效力,可能和Borland公司管理层有关,所以要想能有高效(高速,占用内存下)的类库,只有自己写咯。 也是因此FastCode, FastMM,FastObj等等一系列为底层提速的Library才被Delphi Fans开发出来。这些本来应该是Delphi Team的工作。 举着MDA的大旗,就不管效率了?MDA(模型驱动技术)只是辅助生成源代码的手段而已。它再怎么牛,最终还是落实到底层类库上。 说起类的Model架构,就是气,看看后来Delphi Team写的WebService,一来就是Interface,SOAP,XML!它倒是一下满足需求了,可它也就只能干这个! 能卸能装,才是一个好的架构,就像工厂的车间生产标准化的零件,将不同的零件装配起来,就能够实现不同的功能。每个零件都能独立出来, 另作它用,这才是Delphi的精髓。 Delphi 的MDA我没有用过,我觉得MM就很好用,但是它的缺点就是不支持Object和条件编译令人烦恼。 我依稀记得 RemObjects 就是写了一个工具,用来自动生成远程方法的源代码。看得我想吐。
to wu_yanan 对,我在0.50版本用的就是这个技术手段: 1、保存方法的入口代码(5字节) 2、修改函数方法的入口代码为跳转到我的方法入口 3、执行我自己的处理 4、恢复原来方法的入口代码 5、执行原始的方法 7、再次修改函数方法的入口代码为跳转到我的方法入口 这种方式的缺陷就是无法支持多线程,因为拦截的过程根本无法重入! 所以在0.53版本我想到预先打洞的方式,来解决这个问题。 后来我又在0.54版本想到(就是这个周)一招,嘿嘿,不用打洞,也能重入了!!这下全部搞定!不过,注入器的大小增加到了64个字节, 幸好还是比TObject类占用的空间少(TObject至少占用了76个字节VMT)。 抱歉,我基本上很少上qq,除非是工作上的原因,时间紧阿。 有什么需要问的就问吧。对我来说技术不是问题,难的只是架构!
O/R map: 是数据库记录和对象的映射,开发BO对象我也有这个打算,我目前用的InstantObjects。 通信协议:我从来没有想过开发这个玩意,我只要我的零件能勾挂上我想用的通信协议类库就可以了(RealThinClientSDK, synapse, indy[越开发越忘记它的初衷被我枪毙了]) 安全性:我已经有了一个非常棒的Cipher 类库,我在此基础上开发了非对称加密算法RSA。 元数据代码生成工具: 似乎没有这个必要,不过在未来漫长的日子,也许我会考虑编写一个针对EXE文件的工具:用于静态编织(weave). 客户端UI自动生成功能:这个我从2004年开始就在构思中,但是还是我觉得我的构思还不是很完美,架构始终是最烦人的。Delphi RTTI信息太弱了!大部分都要靠自己。 Spring的框架: 你指的是哪一部分? Core(Bean Container)? AOP? ORM? DAO? Web? MVC? 它真就有这么好么?它的缺点和短处你都明白了? |
wu_yanan2003
23898
|
2006/5/26 12:54:17 |
http://www.delphibbs.com/keylife/iblog_show.asp?xid=22250 基本原理,附简单代码实现。要想达到riceball 的实用程度,还需修改。 |
wu_yanan2003
23879
|
2006/5/25 21:06:34 |
加我聊聊吧,riceball。我专门研究网络,系统底层,和三层技术。 QQ:11718111, 注明:riceball 我掌握类似的技术及代码。最近准备用这个原理做一个AOP框架。目的是想实现DELPHI下三层真正技术。功能如下: 1.支持o/pmaping映射。 2.安全性,与业务无关的多种底层通信协议(http, tcp, udp等) 3.元数据代码生成工具。 4.远程调用采用动态代理技术,AOP技术。 5.类似于spring的框架简单实现。 6.客户端UI自动生成功能。 等等,如果有兴趣。呵呵。加我吧。
|
ralf_jones
23829
|
2006/5/24 11:16:24 |
DELPHI现在走在MDA的路上,可能不会去特别打AOP和GP的大旗了.而且一般也会将MDA和AOP归到GP的下面,那么有MDA也就可以了,基本上都是基于代码生成的OO技术. 不知道为什么要骂人啊? 唉... |
zbird
23754
|
2006/5/21 0:45:28 |
把程序放到这种地方,被人要源码是很正常的,没人要才不正常:)(除非是没人要的东西)。 多数要源码的也主要是赶新鲜,想看一下源码长得是个啥样子而已,没几个人会去认真研究的。 我一直都觉得如果需要语言需要hack,一种可能是这些东西是不赞成使用的,要不就是工具开发商的事了。 希望delphi以后能官方支持aop,不过我觉得可能性不大。 |
skywolf888
23751
|
2006/5/20 22:40:43 |
再补充一句,我是研究三层数据库和网络的,如果三层数据库的服务器端执行的效率,整体稳定性个方面可以通过的话,卖钱也是不错的,呵呵,我愿意以asta和remobjects sdk为你做测试,提供测试环境,呵呵 |
skywolf888
23750
|
2006/5/20 22:35:58 |
忘了说了,如果你也是调用系统级的api自己写类封装了的话,公开也是无妨,愿意研究和你交流的自然会找你,下了源码扔在那睡觉的仍然继续睡觉,呵呵 |
skywolf888
23749
|
2006/5/20 22:33:40 |
牛人,研究AFXRootkit2005我想可以达到同样的效果,系统级的api应该会比你写的效率多少高一些吧 |
chinapr
23747
|
2006/5/20 17:52:55 |
卖东东就卖东东嘛!何必把自己说得那么高尚去贬低别人呢? 做人要厚道 |
jhwh
23742
|
2006/5/20 14:34:14 |
to jhwh 玄,你说的这些让学生我云里雾里的,完全不懂也,GP高人阿,俺饭桶是笨人一个,看不懂那些所谓的pointcut,aspect以及weave code, 这位高人,你就慢慢捣腾GP吧,就不用在这里跟饭桶一般见识了吧。
不过,我还是要提醒你下,AOP的确不是什么AfterExcute这样的东西,它只是一种编程的方法论,目的是为重用功能。 而AfterExcute只是我对AOP编程方法论的一种具体实现!当然你完全可以用其他的方法来实现它! ---------- 这样说话很可笑,也比较傻。你连我的贴子都看不懂,确实不值得和你见识。然而看着你还用着AfterExecute这样的方式,顶着Aop这样的概念,很怕给你误导了。准确点说,你连OO设计都没搞明白。当然了,既然你也认为你是饭桶,没明白OO也正常,GP对你来说,确实难得没有边了,哪里还有资格来谈。嘘都懒得嘘你了。 笨点没关系,人品有问题就麻烦了。 一方面叫嚷着BS着想看看代码的朋友,一边又说“如果你们在这方面造诣深厚,能指教于我,那我二话不说,奉上源码不说,还要恭恭敬敬的奉上。”。看看这付嘴脸,一方面想别人免费给他指教,一方面又要收费,真的是做着婊子立牌坊。我想象不出,hallvard Vassbotn 们会来看连我都看不上眼的东西。
顺便和大家交流一下,谈谈我的一些看法。 为了好说,大体把软件分为应用和系统两种。两种类型没有什么高低之分,难的地方不一样。 从应用软件来看,难的是建模。对各种企业逻辑,很难组织一个通用的模型,然后对它进行设计,现在有的比较公认的模型就是工作流,但是也有几个版本。从系统软件来看,难的是计算机学:各种算法,设备本身的各种特性。 但是,这些都不包括什么汇编这样的”让人看不懂“的东西。开口闭口就说asm,其实就是告诉我们,半罐水来了。register,stdcall,这样的约定,如果让我特意拿出来现,我觉得简直就是丢自己的脸。从语言角度,我以为从简单到困难的排列方式是:to jhwh 玄,你说的这些让学生我云里雾里的,完全不懂也,GP高人阿,俺饭桶是笨人一个,看不懂那些所谓的pointcut,aspect以及weave code, 这位高人,你就慢慢捣腾GP吧,就不用在这里跟饭桶一般见识了吧。
不过,我还是要提醒你下,AOP的确不是什么AfterExcute这样的东西,它只是一种编程的方法论,目的是为重用功能。 而AfterExcute只是我对AOP编程方法论的一种具体实现!当然你完全可以用其他的方法来实现它! ---------- 这样说话很可笑,也比较傻。你连我的贴子都看不懂,确实不值得和你见识。然而看着你还用着AfterExecute这样的方式,顶着Aop这样的概念,很怕给你误导了。准确点说,你连OO设计都没搞明白。当然了,既然你也认为你是饭桶,没明白OO也正常,GP对你来说,确实难得没有边了,哪里还有资格来谈。嘘都懒得嘘你了。 笨点没关系,人品有问题就麻烦了。 一方面叫嚷着BS着想看看代码的朋友,一边又说“如果你们在这方面造诣深厚,能指教于我,那我二话不说,奉上源码不说,还要恭恭敬敬的奉上。”。看看这付嘴脸,一方面想别人免费给他指教,一方面又要收费,真的是做着婊子立牌坊。你又为FastCode做了什么?你为什么要它的源代码?我想象不出,hallvard Vassbotn 们会来看连我都看不上眼的东西。
顺便和大家交流一下,谈谈我的一些看法。 为了好说,大体把软件分为应用和系统两种。两种类型没有什么高低之分,难的地方不一样。从应用软件来看,难的是建模。对各种企业逻辑,很难组织一个通用的模型,然后对它进行设计,现在有的比较公认的模型就是工作流,但是也有几个版本。从系统软件来看,难的是计算机学:各种算法,设备本身的各种特性。 但是,这些都不包括什么汇编这样的”让人看不懂“的东西。开口闭口就说asm,其实就是告诉我们,半罐水来了。register,stdcall,这样的约定,如果让我特意拿出来现,我觉得简直就是丢自己的脸。从语言角度,我以为从简单到困难的排列方式是:stucted,asm,oo,gp。structed方式,和我们直觉思维方式相似,有一个顺序;asm很繁琐,同时要考虑机器的思维,但是也是顺序思维,也就那么回事,没什么难;oo,用类表达概念,显然和前两种语言的思考是完全不一样的了,需要在思维上来个转变。如果还一味的在里面加AfterXXX的方式,也就退回到顺序执行了。这个方式,就有点goto语句一样,直观,但是容易混乱。TDataSet的AfterXXX,我想大家是维护得头疼了把。在一个企业逻辑中,它人为的把企业逻辑给分成了计算机运行片断,当然要避免。所以,我们设计,是要做全面考察的,不要做一个能用的东西就好,否则有得你头疼的时候。我们看看AOP,它的目标是横向跨越几个操作,这个显然和顺序执行是正交的,如果还采用AfterXXX这样的方式,虽然能实现想要的功能,显然有点南辕北辙的味道。所以,我说这个应该交给语言本身来实现。这时候,完全可以看看采用GP怎样做了。GP,名字就是泛型,显然的告诉我们,考虑一个概念,不管具体。而用OO,一写下这个类,就完全确定这个东西了。OO提倡的是一个家族树,而GP提倡的是相似概念的横相层次。当然,interface也是相似的,但是interface只考虑操作,而GP考虑全部。这么看,GP天生就是用来做正交设计的,AOP就是一个正交的例子,用GP来做,很合适。采用GP,能知道对哪些需要的class进行组合,好维护,但是也就变得不灵活;如果是语言本身解决这个问题,确实可以做到对任意一个class进行操作,确实使用简单,但是如果代码组织不好,维护性也就差。
如果各位需要看AOP的代码,上SourceForge,搜索Aspect,AOP到处都是,包括Delphi的。 |
yzdbs
23740
|
2006/5/20 13:25:36 |
>>to 那些叫嚷要源码的 >>互联网上源程序你们下了不少吧,但是你们又看了多少,收获了多少? >>你们多少懂嵌入汇编,8086二进代码?知道什么是register,stdcall调用约定? >>悲哀啊,不知道学习探讨技术,就知道一天到晚源码源码的叫,就算给 >>你们,你们能看懂么?再说了,俺们写点东西,就容易么,放出来免费用 >>还不知足,如果你们在这方面造诣深厚,能指教于我,那我二话不说, >>奉上源码不说,还要恭恭敬敬的奉上。如果是 hallvard Vassbotn 以及 FastCode >>的作者有这个需要的话,那我肯定是二话不说,立马奉上。你们,做了 >>些什么有益于这个项目的事情呢?俗话说,无功不受禄阿!
同意呵。。。 :-) |
wu_yanan2003
23734
|
2006/5/20 10:00:17 |
呵呵,佩服。 |
riceball
23723
|
2006/5/19 17:32:36 |
to all 这不是什么可以拿来玩的玩具(控件),这是我所实现的Delphi AOP SDK! 在我看来,它好比是核弹,虽然威力巨大,但是如果不会操作,那你(的程序)怎么死的都不知道!
如果你不懂OO编程,不知道调用约定,不懂得线程,最好别玩这个。
鉴于一个礼拜过去了,我没有看到一点关于我的AOP反馈信息:错误报告,应用等等。 所以无源码的新版本就不对外公布了,只有那些给了我有价值反馈信息,才有资格免费 获得新版本。
注意[0.5.2.0]: !* 只支持register调用约定(Delphi的默认调用约定)的无参数函数 !* 不支持多线程(拦截的过程方法) !* 不支持拦截构造方法(Constructors)和析构方法(Destructors) !* 过程体内容必须不小于5个字节(因为我的注入代码为5字节) 版本历史: Ver 0.5.2.0 + 无参数的函数返回值现在支持任何类型了! * [Bug] minor bug fixed.
Ver 0.5.1.0 + 支持无参数函数 + 支持拦截在DLL中的函数和方法 * [Bug] minor bug fixed.
Ver 0.5.0.0 [Released] + First Released. + intercept the procedure and method with no parameters.
我目前的开发计划 milestone: Ver 0.6 - 定义类型的 RTTI 信息类,以及相应的管理函数。 基本类型信息,过程参数信息,管理用户自定义类型 Ver 0.7 - 支持带参数的过程方法,但是不可以修改任何参数。(针对 Register 调用约定) 支持对 Constructor 和 Destructor 方法的拦截。 Ver 0.8 - 支持带参数的过程方法,可以修改参数值(包括函数返回值)。 如果是在执行前拦截,这样就可以实现对参数值的约束。 如果是在执行后拦截,则就可以实现对返回值的约束。 这是一把双刃剑,如果滥用的话,就等于是对过程的劫持。 Ver 0.9 - 支持虚方法和动态方法的重入——多线程支持 Ver 1.0 - 对面向功能类(TMeCustomFeature)制定开发规范 规范:拦截的方法必须是发布的动态(dynamic)或虚方法,并且该方法名称不得以"_"或小写字母"i"打头. 如果方法是带参数的活函数,那么必须注册其过程类型! 能够一次性添加某类中符合规范的方法。 支持 stdcall 调用约定的过程或方法 支持 pascal 调用约定的过程或方法
to wu_yanan2003 如果你说的Hook API 是直接修改内存的DLL的函数入口地址,那么这就是我所用的技术! 如果你说的Hook API 是基于SetWindowsHook 之类的话,那就不是!
就是因为WebService这样的实现,太慢,太高层,太庞大,我才会弄这个的。我这个跟WebService 完全是两个不同层次上面的!!它是基于类的重新包裹(动态代理)。而我是底层汇编二进制机器代码 的直接拦截注入。
在我的[Ver 0.5.1.0]已经支持对DLL(BPL)中的过程或方法进行拦截了。嘿嘿,如果加上对进程的远程注入, 后面的话,我就不说了。当然这个要等我实现过程参数才变得真正意义。不过,我不希望我的东西 被滥用。一把剑,放在侠客的手里,自然可以行侠仗义,但是落入居心叵测的人手里,那就麻烦了。
to swnh 被你猜中了,等1.0版本出来,无源码的也是要money的。不过现在的0.5版本可以免费使用。 无源码的大约 $400 有源码的大约 $900
也许考虑现在就卖 $200($400有源码的),这个时候买的,免费升级到1.0。 然后每升级到一个新版本就增加点钱。
to jhwh 玄,你说的这些让学生我云里雾里的,完全不懂也,GP高人阿,俺饭桶是笨人一个,看不懂那些所谓的pointcut,aspect以及weave code, 这位高人,你就慢慢捣腾GP吧,就不用在这里跟饭桶一般见识了吧。
不过,我还是要提醒你下,AOP的确不是什么AfterExcute这样的东西,它只是一种编程的方法论,目的是为重用功能。 而AfterExcute只是我对AOP编程方法论的一种具体实现!当然你完全可以用其他的方法来实现它!
to 那些叫嚷要源码的 互联网上源程序你们下了不少吧,但是你们又看了多少,收获了多少? 你们多少懂嵌入汇编,8086二进代码?知道什么是register,stdcall调用约定? 悲哀啊,不知道学习探讨技术,就知道一天到晚源码源码的叫,就算给 你们,你们能看懂么?再说了,俺们写点东西,就容易么,放出来免费用 还不知足,如果你们在这方面造诣深厚,能指教于我,那我二话不说, 奉上源码不说,还要恭恭敬敬的奉上。如果是 hallvard Vassbotn 以及 FastCode 的作者有这个需要的话,那我肯定是二话不说,立马奉上。你们,做了 些什么有益于这个项目的事情呢?俗话说,无功不受禄阿! |
chinapr
23659
|
2006/5/17 10:04:45 |
不知道作者能不能把源码全部公开呢?
十万感谢 |
chinapr
23657
|
2006/5/17 9:58:58 |
源码不完整。关健部份没有源码呀!!!! |
jhwh
23645
|
2006/5/16 19:44:12 |
如果AOP就是AfterExcute这样的东西,不用也罢。想想TDataSet的一堆AfterXXX,beforeXXX,多么难以维护。何况AOP不是这样的东西。即使算上拦截,这样的方式,闹着玩还可以,想用到开发中,只有死路一条。AOP本来是语言要解决的东西,既然没有,还不如自己做一个类库。oo固有的缺点,就是只能考虑家族树。可惜Delphi没有GP。用GP基本能解决AOP想要做的事情,不过比语言提供的解决方案要负责,但是维护要好得多。网上可以找到c++,java,c#的AOP解决方案。 |
wu_yanan2003
23633
|
2006/5/16 11:14:07 |
猛禽的我已经研究过了,最近在研究API函数的截获。这个也可以实现AOP,可能和楼主的代码原理差不多。 |
zbird
23620
|
2006/5/15 20:41:53 |
WEBSERVICE代码太多而且夹杂着汇编看得头晕(估计这个代码里也应该是有夹汇编的)。 Delphi动态代理的实现 猛禽 已经实现了,上次问他要了代码,不过还没太看。 |