gpt4 book ai didi

delphi - Delphi 7 中组件的重写方法?

转载 作者:行者123 更新时间:2023-12-03 15:27:20 26 4
gpt4 key购买 nike

基于this我正在尝试重写 Delphi 7 中 TOleContainerOnShowWindow 方法。

unit MyOleContainer;

interface

uses
Windows, OleCtnrs;

type
TOleContainer = class(OleCtnrs.TOleContainer)
private
function OnShowWindow(fShow: BOOL): HResult; stdcall; override;
end;

implementation

function TOleContainer.OnShowWindow(fShow: BOOL): HResult;
begin
Result := S_OK;
end;

end.

但这不会编译并给出以下错误:[Error] MyOleContainer.pas(11): Field Define not allowed aftermethods orproperties为什么?

编辑:

您能否解释一下如何“声明 IOleClientSite 的实现、继承自 TOleContainer 并隐藏方法 OnShowWindow [...] 使用 TOleContainer 作为 IOleClientSite”?

编辑2:

这就是你的意思吗?

TMyContainer = class(TOleContainer, IOleClientSite)
private
FIOleClientSite: IOleClientSite;
function SaveObject: HResult; stdcall;
...

constructor TMyContainer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Self.OleObjectInterface.GetClientSite(FIOleClientSite);
end;

function TMyContainer.SaveObject: HResult;
begin
Result := FIOleClientSite.SaveObject;
end;

...

最佳答案

错误消息有点误导。从本质上讲,它的意思是 override 关键字不能出现在 stdcall 关键字之后。

这有点题外话,但如果您要重写一个方法,那么您不需要也不应该重新声明调用约定。重写方法时无法修改调用约定,因此最好不要重复。

但是,当您解决该问题时,您的代码仍然无法编译。那是因为他的OnShowWindow函数不是虚拟的。因此你不能覆盖它。

我不明白如何在不重新声明和重新实现 IOleClientSite 的整个实现的情况下更改 IOleClientSite.OnShowWindow 实现的行为。我认为这根本不容易做到。

关于delphi - Delphi 7 中组件的重写方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com