4

私は C++ 開発に VS2010 を使用していますが、最終的にいくつかの dll プロジェクトで作業を行うことになり、すべてがうまくコンパイルされた後、いくつかのクラスでダミー データを実行してみたいと思いますが、それが dll であり、exe ではないという事実を知っています。メインはそれをやめさせます。それで、私が望むことを行う簡単な方法はありますか、それとも大きなプロジェクトの一部を小さなテストプロジェクトにc / pするために永遠に呪われていますか?プロジェクトのタイプを変更することもできますが、機能をテストする反復的なシェルの方法に似たものをいくつか用意したいと思います。

4

5 に答える 5

5

これがライブラリなどではないことはわかっていますが、Windows で dll を実行したい場合は、何もフレームに入れたり、スクリプトを記述したりせずに、Windows 内で rundll32.exe を使用できます。これにより、エクスポートされた関数を dll で実行できます。構文は次のようになります。

rundll32.exe PathAndNameofDll,exportedFunctionName [ArgsToTheExportedFunction]

http://best-windows.vlaurie.com/rundll32.html -- このバイナリの使用方法に関するシンプルで適切なチュートリアルです。そこにはあなたを驚かせるかもしれないいくつかのクールなトリックがあります。

64 ビット バージョンについて疑問がある場合は、同じ名前 (まじでマイクロソフト?) です。ここで確認してください: rundll32.exe 64 ビット DLL と同等

さらに、低レベルにしたい場合は、理論的には、デバッグしたい DLL を実行するための DLL ローダーに付属しているOllyDbgを (アセンブリで) 利用することができます。 args) ですが、デバッガーはコードのデバッグよりもリバース エンジニアリングに適しています。

于 2012-06-20T03:48:29.487 に答える
3

基本的に2つのオプションがあると思います。

まず、関数に対してある種の単体テストを使用することです。C++ の場合、さまざまな実装を見つけることができます。その 1 つはCppUnitを見てください。

2 番目のオプションは、DLL を開き、Win32API を介して関数を取得し、そのように呼び出すことです (これは、何らかのレベルで単体テストとして認められます)。あなたが言及した「インタラクティブシェル」を実現するために、必要な情報(dllパス、関数名など)でパラメータ化された上記を実行する実行可能ファイルを作成することにより、このアプローチをある程度一般化できます-このパスを取ることにした場合は、チェックアウトできますC++ からの DLL の読み込みに関するこの CodeProject の記事

于 2012-06-14T01:19:23.657 に答える
2

CppUnit が提供する単体テストを使用する以外に、独自の小さなテスト フレームワークを作成することもできます。そうすれば、必要に応じて Dll プロジェクトをセットアップし、ロードし、リンクし、必要に応じて簡単なデータで証明することができます。

これは、特定のジョブを実行するために相互に依存する Dll が多数ある場合に役立ちます。(私の経験では、C++ のレガシー DLL プロジェクトはほとんどテストできない傾向があります)。

いくつかのフレーム アプリケーションを実行したら、CppUnit が提供する可能性を調べて、それをテスト フレームと組み合わせることができます。

そうすれば、価値のある単体テストである自動化されたテストの適切なセットが得られます。プロジェクトがすでに一定のサイズになっている場合、単体テストを開始するのはやや困難です。独自のフレームワークを使用すると、dll に変更を加えるたびにテストを作成できます。それをフレームワークに挿入し、期待どおりの動作をテストして、フレームをさらに強化してください。

基本的な考え方は、テスト、テストランナー、テストデータ、および作成されるアサートを分離することです。

于 2012-06-19T20:57:57.327 に答える
1

WindowPowershellコマンドレットをお勧めします。

こちらの記事(http://msdn.microsoft.com/en-us/magazine/cc163430.aspx)を見ると、セットアップがいかに簡単であるかがわかります。もちろん、この記事は主にC#コードのテストに関するものですが、COM対応のDLLを同じ方法でロードできることについても説明していることがわかります。

ここでは、COMアセンブリをロードする方法を確認できます-http://blogs.technet.com/b/heyscriptingguy/archive/2009/01/26/how-do-i-use-windows-powershell-to-work-with -junk-e-mail-in-office-outlook.aspx

編集:Powershellを広範囲に使用して、管理されているコードと管理されていない(ドライバー)コードの両方をテストしている、非常に成功しているストレージ仮想化ソフトウェア会社を知っています。

于 2012-06-20T14:25:24.107 に答える
1

python + ctypes を使用して、DLL アプリケーションのクイック テスト ルーチンを作成しています。

拡張属性構文を使用している場合は、簡単です。

Google for Python + ctypes + test unit を使用すると、いくつかの例が見つかります。

于 2012-06-19T12:13:21.313 に答える