が、私は機能デルファイ抽象関数は
function GetFieldName(FieldIndex: Integer; FieldName: PChar;
Len: Integer): Integer; virtual; abstract;
を持っていると私は一時的にユニコードのための私のデータベース接続を橋渡しします
function GetFieldNameA(FieldIndex: Integer; FieldName: PAnsiChar;
Len: Integer): Integer;
を追加しようとしていると言う基本クラスよりも、別の名前で呼び出します。
GetFieldNameを引き続き呼び出し、抽象化しないようにして、GetFieldNameAを呼び出すためのビットキャストを行います。これは最初のGetFieldNameの技術的に抽象的なバージョンになります。 (私は基本クラスを全く変更したくない)
外部参照の 'name'キーワードを追加して、サブクラスに別の名前を持つ抽象関数を持たせる方法はありますか?
function GetFieldName(FieldIndex: Integer; FieldName: PChar;
Len: Integer): Integer;
function GetFieldNameA(FieldIndex: Integer; FieldName: PAnsiChar;
Len: Integer): Integer name 'GetFieldName Virtual Abstract';
正確に達成しようとしているのは何ですか?実際にGetFieldNameを使用するコードを変更することなく、GetFieldNameの(オーバーライドされた)実装の現在の階層をGetFieldNameAの(オーバーライドされた)実装の階層に移動しようとしていますか? –
@marjan GetFieldNameA(および他の機能のホスト)を追加しようとしています。GetFieldNameは、Delphi 7でGetFieldNameと同じように動作します。GetFieldNameをUnicodeを使用して呼び出し、GetFieldNameAを呼び出して変換します。問題は、GetFieldNameが抽象であり、実装が全く異なるプロジェクトにあることです。これは奇妙な古いコードです。 –
仮想抽象関数の実装が他のプロジェクトにある場合、あなたは本当にDS(問題の好みに応じて深刻な恐怖や悲惨な海峡に...)しています。あなたは確かに@ Robの解決策が必要になり、GetFieldNameA仮想抽象化を行い、実装ライブラリのメソッドの名前を変更します。ライブラリでGetFieldNameWというユニコードバージョンをコード化する場合は、少なくとも、Windows APIクックブックとDelphiの外部宣言から葉を取るような、基本クラスのGetFieldNameでどちらを呼び出すかを決めることができます。 –