4

DelphiでActiveXライブラリを作成しています。このライブラリでは、特定のオブジェクトに、date型の単一のパラメータを持つDevelopmentCountというプロパティがあります。内部的に、プロパティゲッターは、単一のパラメーターがオプションである通常のDelphiオブジェクトで同様の名前の関数を呼び出します(この最後の要素は無関係である可能性があります)。

Delphi 2006でこのライブラリをエンドユーザーにコンパイルすると(Excel VBAを使用)、DevelopmentCountプロパティの単一のパラメーターはオプションであるように見えます。

Delphi 2009に移行しました(6か月以上使用しています)。同じライブラリをDelphi2009でコンパイルすると、エンドユーザーにとって、DevelopmentCountプロパティの単一のパラメータはオプションではなくなります。

私の質問は、Delphi2009でこのパラメータをオプションのように見せるためにどうすればよいかということです。

4

1 に答える 1

4

COMライブラリにデフォルトパラメータ(VBAではオプションパラメータと呼ばれます)を追加するには、タイプライブラリエディタでパラメータフラグを設定する必要があります。修飾子の列をクリックしてから、問題のパラメーターのボタンをクリックします。[デフォルト値があります]チェックボックスをオンにし、付属の編集ボックスにデフォルト値を入力します。

今問題のために。Delphi 2009では、タイプライブラリエディタにバグがあり、日付を文字列としてridlファイルに書き出そうとします。実際、エディターはこれを整数に変換する必要があります。これはコンパイルされません。幸い、ridlファイルは文字列ファイルであり、編集することができます。これがridlファイルに表示されるものです

HRESULT _stdcall DevelopmentCount([in, defaultvalue(29/12/1899)] DATE);

その日付を整数に変更します(1899年12月30日は0であることに注意してください)

HRESULT _stdcall DevelopmentCount([in, defaultvalue(-1)] DATE);

これでdllがコンパイルされ、デフォルト値が適用されます。

Delphiでタイプライブラリを開くと、整数が日付文字列に置き換えられ、コンパイルできなくなるため、元に戻す必要があることに注意してください。これがDelphi2010で修正されたかどうかはわかりません。

于 2009-09-25T10:42:46.573 に答える