「トップページ/WIN/ETC64」の編集履歴(バックアップ)一覧はこちら
「トップページ/WIN/ETC64」(2010/11/30 (火) 16:12:37) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
|&big(){64bit版Windows}|
とくに断りがない場合は、Windows7ネタです。
#contents()
----
*regsvr32の謎
64bit版Windows上のC#から、VB6のActiveX DLLを使用する場合は、
+ActiveX DLLは、32bit版regsvr32で登録しなくてはならない。
+C#をx86でコンパイルしなくてはならない
+ただし、32bit版Windowsで動かす予定がなければ、その限りでない
64bit版Windowsでは32bitと64bitのCmd.exeが存在し、デフォは64bit版である。
バッチファイルをダブルクリックして起動した場合、
64bit版のコマンドプロンプト上で起動する。
そして、regsvr32も2種類ある。
32ビット版 %systemroot%\SysWoW64\regsvr32.exe
64ビット版 %systemroot%\System32\regsvr32.exe
バッチファイル内にregsvr32がある場合、当然64ビット版が呼ばれる。
C#でVB6のActiveX DLLをつかうときに、
x64でコンパイルすると、64bit版で登録したActiveX DLLを探す。
x32でコンパイルすると、32bit版で登録したActiveX DLLを探す。
AnyCpuでコンパイルすると、x64でコンパイルしたことになる。
rem バッチファイルのサンプル
rem (どこで見つけたかわからなくなりました。作者さん、ありがとうございます)
@echo off
rem もし64ビット版cmdのときは、32ビットで起動しなおす
if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" (
C:\Windows\SysWOW64\cmd.exe /C %0
exit
)
regsvr32 xxx.dll
余談ですが、スタブライブラリ(Interop.xxx.dll)の配布もお忘れなく……