我应该在Delphi中使用哪个版本的iAlloc?
我正试图在DelphiXE中重构一个Delphi5项目,为此我需要修复一个名为BrowseDr的单元中的一些错误。我得到的错误是我应该在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是从一个
[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;