我对Delphi源代码有疑问 请帮我解释一下。
详细问题如下:
我有两个Delphi应用程序。它们是两个.dll文件(它调用App1和App2)。
App1有如下方法:
procedure SetImage( objControl : Object; img: Pointer);
begin
objControl.Picture.Bitmap := img;
end;
在App2中,我将App1的上述方法调用如下,以在报告上显示图像。
SetImage( objPreImgs, tempJPEG );
objPreImgs是正确的对象,而temJPEG是TJPEGImage对象。
如果我用Delphi 7编译App1和App2,没有任何问题 如果我使用Delphi 7编译App1和使用Delphi 6编译App2,则会出现一个问题(无法在报表上显示图像)。
我还不知道上述问题的根本原因 如果您知道,请为我解释。
p / s:App1无法使用Delphi 6进行编译。
答案 0 :(得分:4)
尽管两个“应用程序”共享一个共同的内存区域,但每个内容都是:
因此,当您将指针传递给另一个“应用程序”中的对象时,它会考虑自己的并且正在自己的VMT中查找方法。当然,D6 VMT与D7不同,后者导致AV,堆栈溢出和其他错误。
所以,你不能通过dll传递对象和类应用
返回任务:您需要以不需要使用对象的方式传递图像的内容,例如 - 使用iStream或SharedMemory。您还可以将句柄传递给图像,因为句柄是应用程序统一地址空间中的两个dll的“全局”值。但是......第一个过程(SetImage)不是必需的 - 这个动作必须在app2中执行。
答案 1 :(得分:0)
它无法编译,因为它不是正确的语法
首先objControl : Object
应为objControl : TImage
img: Pointer
应该是img:TBitmap
objControl.Picture.Bitmap := img;
应该objControl.Picture.Bitmap.Assign(img);
我相信你需要一本初学者书