我应该在Delphi中使用哪个版本的iAlloc?

我应该在Delphi中使用哪个版本的iAlloc?,delphi,shell,types,delphi-xe,Delphi,Shell,Types,Delphi Xe,我正试图在DelphiXE中重构一个Delphi5项目,为此我需要修复一个名为BrowseDr的单元中的一些错误。我得到的错误是 [DCC Error] BrowseDr.pas(1033): E2033 Types of actual and formal var parameters must be identical line 1033: SHGetMalloc(FShellMalloc); “MyShlObj”: 现在,FShellMalloc声明中使用的IMalloc是从一个

我正试图在DelphiXE中重构一个Delphi5项目,为此我需要修复一个名为BrowseDr的单元中的一些错误。我得到的错误是

[DCC Error] BrowseDr.pas(1033): E2033 Types of actual and formal var parameters
 must be identical

line 1033:   SHGetMalloc(FShellMalloc);
“MyShlObj”:

现在,FShellMalloc声明中使用的IMalloc是从一个
OLE2.IMalloc
而“MyShlObj”中使用的是来自
ActiveX.IMalloc

有可能改变其中一个吗?
如果是,建议这样做吗?

我认为唯一可行的修改是确保FShellMalloc派生自与MyShlObj使用的接口相同的接口


修改其中一个以使用与另一个相同的iAlloc。

旧的Delphi版本使用了
OLE2
单元,此单元被
ActiveX
单元取代,因此现在您必须在新项目中使用
ActiveX
类型。

检查您的使用条款。许多第三方代码使用编译器指令加载正确的单元。更改编译器版本通常会导致加载错误的文件


DFS
是一个典型的例子。转到
DFS.INC
并确保定义了适当的
DFS\u编译器\u xxx

是的,这就是我的想法,但我该怎么做呢?好的,谢谢,现在我知道在哪里更改了,至少我要弄清楚如何更改。对于将来获得此功能的任何人:始终明确指定单元名称前缀(OLE2.x或ActiveX.x)来解析“实际变量参数和形式变量参数的类型必须相同”。注意:您可以显式限定类型(ActiveX.IMalloc)或确保ActiveX单元在uses子句中位于第一位,但由于后一种解决方案很脆弱,我建议显式限定它。
//SHGetMalloc declaration 
function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall;