Visual Studio 2012 を使用して C++ ベースの COM オブジェクトを作成しました。これは 64 ビット マシン (32 ビット コードによって呼び出され、32 ビット アウトプロセス COM サーバーを呼び出す) で登録され、正常に動作しますが、32 ビットでは登録されません。ビット マシン (XP でも Win7 32 ビットでもない)。regsvr32 からのメッセージは
LoadLibrary("comobj.dll") failed - The specified procedure could not be found.
プロジェクトはもともと Visual Studio 6 (7 年前) でビルドされました。BEGIN_COM_MAP や BEGIN_SINK_MAP などの ATL マクロを使用して、さまざまなインターフェイスの実装を宣言します。呼び出している COM サーバーが変更されたため (新しい ProgID、新しい GUID、新しいタイプ ライブラリなど)、再コンパイルする必要がありました。これらの調整を行い、現在の VS を使用する以外に、(意図的な) 変更はありませんでした。プロジェクト ファイルの古い同等物には、64 ビットを指すものは何もありませんでした。
DEPENDS.EXE の 64 ビット バージョンで DLL を調べると、KERNEL32 や USER32 などの標準参照 DLL の横に「64」アイコンが表示されます。64 ビット マシンで DLL をビルドしたことを除けば、DLL について「64 ビット」のものを見つけることができません。ターゲットは明示的に Win32 (X64 ではない) です。
32 ビット バージョンの DEPENDS.EXE (Virtual PC で実行されている Windows XP 上) で DLL を調べると、32 ビット バージョンには存在しない FlsAlloc FlsFree FlsGetValue FlsSetValue への参照があるため、赤いアイコンで KERNEL32.DLL が表示されます。カーネル32.DLL。(私はそれらが何であるかわかりませんし、それらの参照がどこから来たのかわかりません-おそらく、コンパイルが行われた64ビットマシン上のMFCのコピーからですか?)
XPにVS2012をインストールして、そこで再コンパイルする必要があるのでしょうか?現在の Visual Studio を使用して C++ で Win32 COM オブジェクトをビルドするために、実際にこれを行う必要があるのでしょうか?
私がどこを見ているか知っている人はいますか?すべてのプロジェクトとソリューションのオプションを確認しましたが、64 ビットに設定されているものはないようです。「MFC の使用」の下のオプションは「標準の Windows ライブラリを使用する」に設定されています。これがおそらく答えですが、それが 32 ビット Windows に移植できない場合、「標準ライブラリ」のみを使用することはほとんどありません。(これを送った後、それを変更しようとします。)
アドバイスをよろしくお願いします。