Delphi 2010 に付属の DUnit を使用して、適切な OO プラクティス (例: ビジネス ロジックをクラス/ユニットに分離する) に従わない 1000 万の LOC プロジェクトにいくつかの基本的な自動テストを実装しようとしています。通常のユニットは実行できません。ビジネス ロジックの各部分は相互に依存する数十のユニットにまたがっているため、このプロジェクトでテストを行っていますが、これらのユニットの「グループ」は、特定の「メイン ビジネス ロジック画面」を中心にしています (例: すべての請求書ロジック関連のユニットは、これらの画面はクラスであるため、単体テストの代わりに「メイン ビジネス ロジック画面クラスのテスト」を行うことができますが、これらの「メイン画面」には、プロセスの起動時に作成される多くのものがまだ必要です。
だから私は両方が必要です:
- 悪いプロジェクトのスタートアップを実行できるようにする
- そのオブジェクトにアクセスできる
悪いプロジェクトには、オブジェクトにアクセスするためにキャストできるポインターを返すエクスポートされた関数が既にいくつかありますが、どちらの方法でも呼び出すことができません。
問題のあるプロジェクトをテスト プロセスの子プロセスとして作成すると、スタートアップ コードは正常に実行されますが、複雑な IPC メソッドや問題のあるプロジェクトの構造を大幅に変更しない限り、エクスポートされた関数を呼び出す方法が見つかりません。
悪いプロジェクトの .exe を LoadLibrary 関数のように dll としてロードした場合、悪いプロジェクトによってエクスポートされた関数を呼び出すと、この単純な手順でもアクセス違反やセグメンテーション エラーが発生します。
procedure Test; {safecall;} {stdcall;}
begin
showmessage('Yay!');
end;
どうすれば両方を行うことができますか?