開発環境:
- Windows 2008 サーバー32 ビット
- Visual Studio 2010 プロフェッショナル
- ビジュアルベーシック6
対象環境:
- Windows 2012 R2 64 ビット
VB6 アプリケーション ( app.exe
) は、COM 可視の .NET DLL ( netdll.dll
) に依存しています。これは、Visual Basic 6 によって生成された COM DLL に依存しています (ListBox オブジェクトを処理するためのラッパーです。それを呼び出しますvb6dll.dll
)。
上記のように、dev os は 32 ビットであるため、それらはすべて 32 ビットです。file
また、Cygwin で提供されるコマンドでそれらをチェックしました。
amessihel@aselkim:~> file path/to/app.exe
path/to/app.exe: PE32 executable (GUI) Intel 80386, for MS Windows
amessihel@aselkim:~> file path/to/netDLL.dll
path/to/netdll.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
amessihel@aselkim:~> file path/to/vb6.dll
path/to/vb6.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
RegAsm
登録に使用されましたnetdll.dll
:
amessihel@aselkim:~> /cygdrive/c/Windows/Microsoft.NET/Framework/v4.0.30319/RegAsm ./netdll.dll /codebase /tlb:netdll.tlb
SysWow64\RegSvr32
vb6dll.dll
ターゲット環境への登録に使用されました。
amessihel@aselkim:~> /cygdrive/c/Windows/SysWOW64/regsvr32.exe ./vb6dll.dll
VB6 アプリケーションを起動すると、次のメッセージが表示されました。
次のエラーのため、CLSID {XXXX} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80040154
この質問の重複ではないと思います。Windows 2008 から Windows 2012 R2 に変更された CLSID をvb6dll.dll
見つけました...そして、それnetdll.dll
が見つからない理由のようです...もしそうなら、なぜ登録がこのように動作するのですか?
更新:私はCLSIDの初心者であることを認めます...明確に理解していれば、VB6は各COMオブジェクトのCLSIDを書き込み、これらのCLSIDはRegSvr32によって取得されます。正しい場合、Windows 2012 バージョンの RegSvr32 (SysWow64) がレジストリに別の CLSID を書き込むのはなぜですか?