2011-01-20 2 views
3

Я пытаюсь реорганизовать проект Delphi 5 в Delphi XE, чтобы сделать это, мне нужно исправить некоторые ошибки в модуле под названием BrowseDr. Ошибка я получаюКакую версию IMalloc следует использовать в Delphi?

[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.

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

ответ

7

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

+0

Okey, теперь я знаю, где по крайней мере изменить, просто нужно выяснить, как это сделать. – Roise

+0

Получил это, спасибо большое. – Roise

+0

Для всех, кто получает это в будущем: всегда указывайте префикс имени единицы (OLE2.x или ActiveX.x) явно для разрешения «Типы фактических и формальных параметров var должны быть одинаковыми». –

1

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

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

+0

Да, вот что я подумал, но как я могу это сделать? – Roise

+0

Посмотрите мои комментарии в принятом ответе –

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^