4

DelphiXEでDelphi5プロジェクトをリファクタリングしようとしています。そのためには、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」で使用されているIMallocはから派生していActiveX.IMallocます。

それらの1つを変更することは可能ですか?はいの場合、それはお勧めですか?

4

3 に答える 3

7

OLE2ユニットは古いDelphiバージョンで使用されていましたが、このユニットはユニットに置き換えられたため、新しいプロジェクトでタイプをActiveX使用する必要があります 。ActiveX

于 2011-01-20T09:59:32.360 に答える
1

私がうまくいくと思う唯一の変更は、FShellMallocがMyShlObjから使用されたものと同じインターフェースから派生していることを確認することです。

どちらか一方を変更して、もう一方と同じIMallocを使用します。

于 2011-01-20T09:57:16.727 に答える
1

使用句を確認してください。多くのサードパーティコードは、コンパイラ指令を使用して正しいユニットをロードします。コンパイラのバージョンを変更すると、多くの場合、間違ったファイルがロードされます。

DFS古典的な例です。に移動してDFS.INC、適切なものDFS_COMPILER_xxxが定義されていることを確認します。

于 2012-11-03T20:46:04.770 に答える