Какую версию IMalloc мне следует использовать в Delphi? - PullRequest
3 голосов
/ 20 января 2011

Я пытаюсь реорганизовать проект Delphi 5 в Delphi XE, для этого мне нужно исправить некоторые ошибки в модуле под названием 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;

Теперь IMalloc, используемый в объявлении FShellMalloc, получен из OLE2.IMalloc в то время как тот, который используется в "MyShlObj", от ActiveX.IMalloc.

Возможно ли изменить один из них? Если да, рекомендуется ли это?

Ответы [ 3 ]

7 голосов
/ 20 января 2011

Модуль OLE2 использовался в старых версиях Delphi, этот модуль был заменен на модуль ActiveX, поэтому теперь вы должны использовать типы ActiveX в своем новом проекте.

1 голос
/ 04 ноября 2012

Проверьте пункт использования.Многие сторонние коды используют директивы компилятора для загрузки правильного модуля.Изменение версии компилятора часто приводит к загрузке неверного файла.

DFS - классический пример.Перейдите к DFS.INC и убедитесь, что определен соответствующий DFS_COMPILER_xxx.

1 голос
/ 20 января 2011

Единственное изменение, которое, я думаю, сработает, - убедиться, что FShellMalloc получен из того же интерфейса, что и MyShlObj.

Измените один из них, чтобы использовать тот же IMalloc, что и другой.

...