ええと、手続きや関数を変数に格納し、
それをつかうには、
type
TPointCB = procedure(SrcRGB,DestRGB:pRGBarray;PointX,lParam:Integer) of object;
などとして型宣言した後、
Process : TPointCB
などとやればいいですけど、
これを用途の同じ何種類かの手続きを入れられるようにはできないでしょうか?
たとえば
type
TPointCB = procedure(SrcRGB,DestRGB:pRGBarray;PointX,lParam:Integer) of object;
TPointCB2 = procedure(SrcRGB,SrcRGBUR,DestRGB:pRGBarray;PointX,lParam:Integer) of object;
とやって、
変数に両方の手続きを入れられるように。
設計自体考え直して、こうならないようにするしかないんでしょうか?
よろしくお願いします。
> 変数に両方の手続きを入れられるように。
おそらく無理だと思います。
言語ガイド 5-28 より
2 つの手続き型が次の条件を満たす場合にだけ
相互に互換性があります。
1. 呼び出し規約が同じ
2. 戻り値が同じであるか、又は戻り値がない
3. パラメータの数が一致し、パラメータの型と順序も一致する
------
となっています。それぞれ別の変数を用意する必要が
あるのではないでしょうか。
それでは。
そうですか…。C言語ではたぶん常識的なことなのではないかと思ったんですけど…。
しばらく考えてみます。
関数への参照でなく、完全にポインタとしてしまうとか。
これがまずいんでしょうかね。
あとは、引数を確実に同じにする。
たとえば、バリアントの配列で渡すなど。
そうですか…。ポインタですか、
わたしも考えてみて、実はそれ以外に方法が思いつきませんでした。
なにか、いい方法があるんじゃないかと、思っていたんですけど…。
バリアント型というのを、Delphiでは使ったことないので、
いまいちわからないですけど、
ヘルプを読みながら、やってみます。
ありがとうございました。
ツイート | ![]() |