読者です 読者をやめる 読者になる 読者になる

RegAsm したはずの dll が CreateObject できない場合(x64)

Automation VBS

x64 環境で RegAsm して vbs から CreateObject しようとして、以下のようなエラーが出ることがある。

C:\tmp\test.vbs(2, 1) Microsoft VBScript 実行時エラー: ActiveX コンポーネントは
オブジェクトを作成できません。: 'COMSample.Class1'

これは RegAsm で登録した場所と vbs が実行されている環境が一致していない可能性がある。

たとえば

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /tlb /codebase C:\tmp\COMSample.dll

して

test.vbs

しようとするとエラーになる。

これだと 32 bit 環境に登録した dll を 64 bit 環境の CScript から呼び出そうとしていることになる。これは %systemdrive%\Windows\SysWoW64\CScript.exe test.vbs と明示的に 32 bit 環境を指定することで解消できる。

つまり両方とも 64 bit 環境にするか

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /tlb /codebase C:\tmp\COMSample.dll
test.vbs

32 bit 環境にそろえればよい。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /tlb /codebase C:\tmp\COMSample.dll
%systemdrive%\Windows\SysWoW64\CScript.exe test.vbs

参考:
Windows 7(x64)でVBScriptからCreateObjectすると800A01ADエラー | majishini