※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

64bit版Windows
とくに断りがない場合は、Windows7ネタです。



regsvr32の謎


64bit版Windows上のC#から、VB6のActiveX DLLを使用する場合は、
  1. ActiveX DLLは、32bit版regsvr32で登録しなくてはならない。
  2. C#をx86でコンパイルしなくてはならない
  3. ただし、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)の配布もお忘れなく……