私はATLプロジェクトに取り組んでいます。x64システムでソリューションを構築すると、x86アーキテクチャでは機能しません。その逆も同様です。(別のアーキテクチャで生成したdllを登録できません)。どこに問題があるのでしょうか?どんな助けでもいただければ幸いです。
2 に答える
あなたが言及した症状は、説明されているとおりである可能性は低いです。または でビルドするWin32
かx64
どうかは問題ではありません。重要なのは、ビルド時にどのターゲット プラットフォームを選択するかです。それで、
異なるアーキテクチャで生成した dll を登録できません
x64
32 ビット Windows では、DLLを使用する方法はありません。これは仕様による動作です。Win32
ただし、64 ビット システムでは通常、32 ビットと 64 ビットの両方の「環境」があり、そこで DLLを使用および登録できます。できない場合、一般的な原因は、必須の依存関係が不足していることです (CRT または別の DLL、Dependency Walkerが役立つ場合があります)。Qにはこれに関する関連情報がないため、これを確認する必要があります。
別の考えられる問題は、登録とは別に、DLL の「使用」に関連している可能性があります。たとえば、AnyCPU
プラットフォーム用の .NET アプリ ビルドから DLL を「使用」し、アプリケーションが 64 ビット Windows で 64 ビット プロセスとして実行される場合、32 ビット DLL は選択されず、使用されません。
[D:\コマンド] > regsvr_32bit.bat と入力します @エコーオフ rem "%SystemRoot%\Syswow64\regsvr32.exe" %s* 開始 ""、regsvr_32bit.exe.lnk "%~f1" [D:\コマンド] > _
「.lnk」ファイルは通常の Windows ショートカットです。
代わりに、コメントに示されているパスを使用できます。
64 ビットの実行可能ファイルは [system32] ディレクトリにあり、32 ビットの実行可能ファイルは [SysWOW64] ディレクトリにあることに注意してください。これは、考える人にとってはかなり混乱する可能性がありますが、考えない人にとっては Just Works™ の互換性対策です。私は考えがちなので、これには長い間苦労しました...
regsvr32 の結果は次のとおりです (例として)。
[C:\Program Files (x86)\Microsoft Visual Studio 11.0] > dumpbin /headers "%SystemRoot%\Syswow64\regsvr32.exe" | 「機械」を見つける 14C マシン (x86) 32ビットワードマシン [C:\Program Files (x86)\Microsoft Visual Studio 11.0] > dumpbin /headers "%SystemRoot%\system32\regsvr32.exe" | 「機械」を見つける 8664 マシン (x64) [C:\Program Files (x86)\Microsoft Visual Studio 11.0] > _