私たちが使用しているサードパーティの.DLLファイルにバグがあり、私はそれを修正するように割り当てられています。ライブラリは、コードを維持するために最後に雇われた会社によって作成されたものであり、ソースコードの一部しかありません。処理に使用されるオブジェクトが私たちが持っているコードにあるときはいつでも、それらはOleVariantsの形式になっています。私の解決策は、バグのあるサブクラスを作成し、メソッドをオーバーライドしてバグを修正することでした。問題は、親クラスからメソッドを呼び出そうとすると、別の.DLLファイルからメモリアクセス違反エラーが発生することです。
私は完全なDelphiの初心者であり、これで3週目になります。どんな助けでもいただければ幸いです。
ありがとうございました。
編集:私はおそらくもう少し詳しく説明する必要があります。元のオブジェクトを、修正が含まれている新しいクラスのインスタンスに置き換えています。元のオブジェクトをOleVariantから新しいクラスにキャストして再キャストするか、オブジェクトのデータを維持できるように新しいオブジェクトのコンストラクターに渡そうとしています。継承された関数またはオブジェクトが元の型にキャストされた後にオブジェクトから関数を呼び出すときに、これを行う方法があり、エラーが発生しないかどうか疑問に思っています。ありがとうございました。
編集2:1つの質問に答えるために、OleVariantから元のクラスまたは作成したサブクラスにキャストしようとしています。
2番目の質問に答えるために:私は関係するライブラリをインポートしてから、次のように書きました。
Subclass = class(SuperclassFromDll)
ここで、「Subclass」と「SuperclassFromDll」は実際のクラス名です。これが正しい方法ではない場合は、問題の関数を置き換える方法を教えてください(おそらく、DllName_TLBユニットに修正を書き込むことによって?)。明確になっていないことをお詫び申し上げます。私はすぐに質問をしようとしているので、それを理解することに戻ることができます。
編集3:DLLファイルは前の会社によって作成されたDelphiプロジェクトから作成されたことにも注意する必要があります。