Dev окружающей среды:Регистрация 32биной DLL с SysWow64 Regsvr32 генерирует другой CLSID, то сообщение об ошибке
- для Windows Server 2008 32 бита
- Visual Studio 2010 Professional
- Visual Basic 6
Целевая среда:
- для Windows 2012 R2 64 бит
приложение VB6 (app.exe
) опирается на COM-видимой .NET DLL (netdll.dll
), которая опирается на себя COM DLL, порожденного Visual Basic 6 (обертка для обработки объекта ListBox, позволяет называть его vb6dll.dll
).
Все они 32 бит, так как dev os 32 бит, как указано выше. Я также проверил их с file
команды снабженной Cygwin:
[email protected]:~> file path/to/app.exe
path/to/app.exe: PE32 executable (GUI) Intel 80386, for MS Windows
[email protected]:~> file path/to/netDLL.dll
path/to/netdll.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
[email protected]:~> file path/to/vb6.dll
path/to/vb6.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
RegAsm
был использован для регистрации netdll.dll
:
[email protected]:~> /cygdrive/c/Windows/Microsoft.NET/Framework/v4.0.30319/RegAsm ./netdll.dll /codebase /tlb:netdll.tlb
SysWow64\RegSvr32
был использован для регистрации vb6dll.dll
в мишени environnment.
[email protected]:~> /cygdrive/c/Windows/SysWOW64/regsvr32.exe ./vb6dll.dll
Когда я запустить приложение VB6, я получил это сообщение:
Retrieving the COM class factory for component with CLSID {XXXX} failed due to the following error: 80040154
Я думаю, что это не дубликат this question. Я выяснил CLSID vb6dll.dll
изменен с Windows 2008 на Windows 2012 R2 ... И, похоже, почему netdll.dll
не может найти его ... Если да, то почему регистрация ведет себя так?
Update: Я признаю, что я новичок с CLSID питанием ... Если я понимаю, это ясно, VB6 пишет себя идентификаторы CLSID для каждого COM-объекта, и этот CLSID, извлекается RegSvr32. Если это правда, почему версия RegSvr32 (SysWow64) Windows 2012 записывает другой CLSID в реестр?
Я буду очень благодарен за понимание того, почему я получил это предложение. – Amessihel