0

ボリュームシャドウコピープログラムに取り組んでいます。Windows XP用のプロジェクトをコンパイルするには(Vistaおよび7と比較して)、別の.hファイルのセット(vsbackup.h)および関連する.libファイル(vssapi.lib)を使用する必要があることがわかりました。これは、.hファイルの一連の微妙な変更によるものです。XPでは、APIへの呼び出しなどCreateVssBackupComponents()の呼び出し(vsbackup.hには宣言のみがありました)。最近のvsbackup.hはこれをに変更CreateVssBackupComponents() { CreateVssBackupComponentsInternal(); }し、新しい.hファイルと.libファイルを使用してプロジェクトをコンパイルし、XPでプログラムを実行すると、

プロシージャエントリポイント「CreateVssBackupComponentsInternal」がDLL「vssapi.dll」に見つかりませんでした。

これらの2つの異なるlibファイルを1つのプロジェクトに組み込んで、2つの異なるバージョンのプログラムをコンパイルする必要がないようにする可能性はありますか?

4

3 に答える 3

2

dllの2つの異なるバージョンで作業する必要がある場合(問題がそこにあることを正しく理解している場合、異なるlib / headersは氷山の一角にすぎないため)、動的にロードする必要がありますLoadLibrary。エントリポイントの存在を確認してください。必要なGetProcAddress関数を必要とし、それが返した関数ポインタを使用して必要な関数を呼び出します。

于 2011-07-07T00:37:33.530 に答える
1

XP用と新しいWindowsバージョン用の2つのプロジェクト構成を作成することもできます。次に、両方のファイルをインストーラーに追加し、インストーラーにインストール先のWindowsバージョンを確認させ、プログラムの正しいバージョンを選択させます。(それは基本的に私があなたの問題を抱えていたときに私がしたことです)

しかし、より適切な解決策は、それをDLLに入れ、そのDLLの2つのバージョンを作成してから、適切なDLLを実行時にチェックしてロードすることです。そうすれば、WindowsUpdateで問題が発生することはありません。

于 2011-07-13T21:28:31.977 に答える
0

個人的には、ライブラリが少し/ crazy /になり始めたら、問題のあるライブラリに独自のプロセスを与えることを検討し始め、ある種のRPCを使用してライブラリと対話します。

于 2011-07-07T00:36:04.293 に答える