Это ошибка, которую вы получаете, когда сама DLL требует, чтобы сначала был зарегистрирован другой COM-сервер, или имеет зависимость от другой недоступной библиотеки DLL. Инструмент Regsvr32.exe делает очень мало, он вызывает LoadLibrary () для загрузки DLL, переданной в аргументе командной строки. Затем GetProcAddress (), чтобы найти точку входа DllRegisterServer () в DLL. И вызывает его, чтобы оставить его на COM-сервере, чтобы зарегистрироваться.
То, что делает код , довольно неосуществимо. Однако полученная вами диагностика довольно очевидна по коду ошибки, по какой-то причине этот COM-сервер должен быть зарегистрирован первым. Сообщение об ошибке дрянное, оно не говорит вам , какой другой сервер ему нужен. Печальный побочный эффект от того, как работает обработка ошибок COM.
Чтобы устранить эту проблему, используйте инструмент ProcMon от SysInternals. Он показывает, какие ключи реестра Regsvr32.exe (на самом деле: COM-сервер) открывает для поиска сервера. Ищите доступ к ключу CLSID. Это дает вам подсказку, что {guid} он ищет. Это все еще не говорит вам о DLL сервера, вам следует сравнить трассировку с той, что вы получаете с работающей машины. Ключ InprocServer32 имеет путь к DLL.