询问Delphi源代码

时间:2015-08-24 04:01:02

标签: delphi

我对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进行编译。

2 个答案:

答案 0 :(得分:4)

尽管两个“应用程序”共享一个共同的内存区域,但每个内容都是:

  • 使用自己的内存管理器,
  • 拥有自己的VMT(虚拟方法表)
  • 和对象模型。

因此,当您将指针传递给另一个“应用程序”中的对象时,它会考虑自己的并且正在自己的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);

我相信你需要一本初学者书