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

时间:2011-01-20 09:43:07

标签: delphi shell types delphi-xe

我正在尝试在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

有可能改变其中一个吗? 如果是,是推荐吗?

3 个答案:

答案 0 :(得分:7)

较旧的Delphi版本使用了OLE2单元,此单元已替换为ActiveX单元,因此现在必须在新项目中使用ActiveX类型。

答案 1 :(得分:1)

我认为唯一有效的改变是确保FShellMalloc派生自与MyShlObj使用的接口相同的接口。

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

答案 2 :(得分:1)

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

DFS是一个典型的例子。转到DFS.INC并确保定义了适当的DFS_COMPILER_xxx