2013-12-23 1 views
0

Я использую PDFCreator для создания PDF-файлов в VB6. Моей виртуальной машиной VB6 является 32-разрядная Windows XP. В этой системе создание PDF-файлов работает как из настольного приложения, так и из ASP (через веб-интерфейс VB).PDFCreator и VB6 на 64-бит: компонент ActiveX не может создать объект

Когда я создаю ех для запуска на Windows 7 или Windows Server 2008 R2 или использовать его в вебе-классе выполнении я получаю:

Run-time error '429': 
ActiveX component can't create object 

Это при использовании раннего связывания. Добавить ссылку на проект в «C: \ Program Files \ PDFCreator \ PDFCreator.exe», а затем в своем коде я делаю:

Public WithEvents mPDFCreator As PDFCreator.clsPDFCreator 
Set mPDFCreator = New PDFCreator.clsPDFCreator 

Если я бы не использовать ссылки на проекты и использовать позднее связывание вместо этого, то он работает в настольном приложении, но все еще не работает в среде веб-класса. Позднее связывание делается так:

Set mPDFCreator = CreateObject("PDFCreator.clsPDFCreator") 

Я хочу использовать раннее связывание, так что я могу использовать событие, плюс мне нужно работать в ASP/Web класс исполнении.

Я понимаю, что имею дело с древними технологиями здесь, и я должен был закалить ожидания при работе с такими вещами на современных 64-битных Windows и IIS. Если переносить это устаревшее приложение в .NET, я бы выбрал вариант.

В IIS я установил Включить 32-разрядные приложения в моем приложении. Я также пытался запустить его как администратора для устранения проблем с безопасностью.

Я сделал все, что умею отлаживать, но я в тупике. Я подозреваю, что это связано с тем, что PDFCreator является 32-битным приложением и регистрацией COM. Я также пытался запустить regsvr32 из SYSWOW64, но файл PDFCreator.exe не может быть зарегистрирован.

ответ

0

64-разрядная архитектура Windows не позволяет загрузке 32-разрядной библиотеки в 64-разрядные процессы.

Но вы можете изменить конфигурацию своего проекта vb, чтобы преобразовать его из COM-компонента in-process dll в COM-сервер exe-process exe. Это позволит вам создать экземпляр вашего 32-битного компонента из 64-битного процесса.

См Process Interoperability

0

Поскольку это VB6 вопрос нет каких-либо 64-битные процессы для беспокойства.

Кажется гораздо более вероятным, чем что-либо еще, что эта библиотека просто не зарегистрирована должным образом. Я не использую его, так как не знаю, работает ли его настройка. Я знаю, что сама загрузка не отображается с помощью UAC Shield на ее значке, что само по себе является подозрительным. Насколько мне известно, программа установки запускает запуск неправильного regsvr32.exe.

Но, скорее всего, вы неправильно зарегистрировали библиотеку вручную после копирования ее нагишом на эти 64-разрядные системы Win7/Server 2008.

В любом случае, рассмотрев все описанные вами симптомы, я бы предположил, что он зарегистрирован как 32-битная библиотека ActiveX, но зарегистрирован в виртуализованной части реестра для пользователя, с которым вы вошли в систему как при регистрации.

Это может быть хлопот для очистки после.Однако вы должны, а затем обязательно вручную запустить исходную установку еще раз с отметкой.

Эти темы, которые включают в себя отжимание рук по «древним технологиям» действительно стареть. Это плохой рабочий, который обвиняет свои инструменты. В будущем, почему бы не нанять опытного программиста для решения таких задач?

 Смежные вопросы

  • Нет связанных вопросов^_^