2

ActiveXライブラリを使用するDelphi 2007でクラスを作成しようとしています。このクラスは、ActiveX ライブラリが ActiveX ライブラリのイベントに情報を追加する独自のイベントを公開する必要があるイベントをキャッチします。

肝心なのは、使用したい ActiveX ライブラリのイベントに独自のプロシージャを割り当てると、次のエラーが発生することです。

E2009 Incompatible types: 'Parameter lists differ'

パラメータリストは同じ(同じ数のパラメータと同じタイプ)であると確信しているので、間違った方法で行っていると思います。

何か提案があるか、誰かが私がやろうとしていることのサンプルコードを投稿できますか?

4

2 に答える 2

5

最初に確認することは、イベント プロパティに割り当てようとしているものがmethodであることです。クラスに属するプロシージャまたは関数である必要があります。スタンドアロンのサブルーチンにすることはできません。

次に、型の名前が一致することを確認するだけでは不十分であることに注意してください。Delphi では識別子を再定義できるため、あるユニットに表示される型名が、別のユニットに同じ識別子が表示されたときに、必ずしも同じものを参照しているとは限りません。ユニットの途中で意味が変わることさえあります。例えば:

unit Example;

interface

uses Windows;

var
  foo: TBitmap;

implementation

uses Graphics;

var
  bar: TBitmap;

end.

foo変数には type 、Windows.TBitmapレコード型があり、bartype Graphics.TBitmap、クラス型があります。

IDE でこれを診断できます。識別子名を Ctrl キーを押しながらクリックすると、IDE でその宣言が表示されます。彼らはあなたを同じ場所に連れて行きますか?そうでない場合は、タイプ名をユニット名で修飾できます。たとえば、bar上記の宣言を次のように変更できます。

var
  bar: Windows.TBitmap;

これで、 と同じ型になりfooます。イベントハンドラ宣言で同じ種類のものを確認してください。

于 2009-01-12T01:15:36.657 に答える
1

Ctrl + クリックで gabr のアドバイスを使用したところ、パラメーターの 1 つが定数であることがわかりましたが、これは認識していませんでした。2 番目の変数を const に変更したところ、問題なく動作しました。ありがとう。

于 2009-01-12T12:37:24.567 に答える