我正在尝试在Delphi XE中重构Delphi 5项目,为此我需要在一个名为BrowseDr的单元中修复一些错误。我得到的错误是
[DCC Error] BrowseDr.pas(1033): E2033 Types of actual and formal var parameters
must be identical
line 1033: SHGetMalloc(FShellMalloc);
“MyShlObj”:
//SHGetMalloc declaration
function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall;
现在,FShellMalloc声明中使用的IMalloc派生自OLE2.IMalloc
而“MyShlObj”中使用的那个来自ActiveX.IMalloc
。
有可能改变其中一个吗? 如果是,是推荐吗?
答案 0 :(得分:7)
较旧的Delphi版本使用了OLE2
单元,此单元已替换为ActiveX
单元,因此现在必须在新项目中使用ActiveX
类型。
答案 1 :(得分:1)
我认为唯一有效的改变是确保FShellMalloc派生自与MyShlObj使用的接口相同的接口。
修改其中一个以使用与另一个相同的IMalloc。
答案 2 :(得分:1)
检查您的使用条款。许多第三方代码使用编译器指令来加载正确的单元。更改编译器版本通常会导致加载错误的文件。
DFS
是一个典型的例子。转到DFS.INC
并确保定义了适当的DFS_COMPILER_xxx
。