1

私はATLプロジェクトに取り組んでいます。x64システムでソリューションを構築すると、x86アーキテクチャでは機能しません。その逆も同様です。(別のアーキテクチャで生成したdllを登録できません)。どこに問題があるのでしょうか?どんな助けでもいただければ幸いです。

4

2 に答える 2

2

あなたが言及した症状は、説明されているとおりである可能性は低いです。または でビルドするWin32x64どうかは問題ではありません。重要なのは、ビルド時にどのターゲット プラットフォームを選択するかです。それで、

異なるアーキテクチャで生成した dll を登録できません

x6432 ビット Windows では、DLLを使用する方法はありません。これは仕様による動作です。Win32ただし、64 ビット システムでは通常、32 ビットと 64 ビットの両方の「環境」があり、そこで DLLを使用および登録できます。できない場合、一般的な原因は、必須の依存関係が不足していることです (CRT または別の DLL、Dependency Walkerが役立つ場合があります)。Qにはこれに関する関連情報がないため、これを確認する必要があります。

別の考えられる問題は、登録とは別に、DLL の「使用」に関連している可能性があります。たとえば、AnyCPUプラットフォーム用の .NET アプリ ビルドから DLL を「使用」し、アプリケーションが 64 ビット Windows で 64 ビット プロセスとして実行される場合、32 ビット DLL は選択されず、使用されません。

于 2013-02-28T18:28:43.803 に答える
1
[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]
> _
于 2013-02-28T15:00:33.377 に答える