在Delphi中,新建一个Application,在Dpr单元写个最简单的单元,用Exports也能输出这个函数。
用PE分析软件也能在Exe文件的输出表中找到该输出函数。
但是在另外一个Exe文件中,把它当Dll调用,都返回不了正确结果呢?
我把输出函数改成beep也是内存错误。晕
我用BCB测试了一把,
还是不行,
可以找到函数入口,
但是地址好象指错了。
我想,问题可能出在Borland自身的实现机理上与Windows执行原理的冲突上。
如果查看Borland提供的Rtl源代码,可以看到,Delphi在每个EXE工程的开始处都保留了自己的句柄、内存空间、以及重定位了一些全局函数。
但是,根据Windows的执行原理,调用的DLL与调用者处在同一平坦内存区域,内存中所有全局性的东西是共用的,而不是各自有所保留。
个人认为,应该是Application.Handle的问题,当作为Exe直接运行的时候,会产生新的Application.Handle,所以你的MessageBox可以正确执行,而当作Dll运行的时候,不会生成新的Application.Handle,而MessageBox是Application的方法,既然没有Application,那么肯定会有问题的,你可以把主调用程序的Handle传递进去试试吧。
=============================================================================
声明:本人绝对不是高手,最多是一个低手,以上只是胡说几句,对就对,错了也不要笑话!
祝好运……