2014-02-12 6 views
0

Я пытаюсь создать элемент управления ActiveX для приложения на устройстве Windows CE 6.0, но я не могу его зарегистрировать на устройстве. Когда я переношу файл .ocx на устройство и пытаюсь зарегистрировать его с помощью regsvrce.exe, он терпит неудачу с ошибкой 7e, которую я узнал, потому что отсутствует зависимость. Как я могу определить, какая зависимость отсутствует? В качестве альтернативы, я неправильно решил создать элемент управления ActiveX?Отсутствует зависимость для .ocx в Windows CE 6.0

Я загрузил .ocx в Dependency Walker на моей машине разработки (в этом случае работает 64-разрядная версия Windows 7, если это имеет значение), а все зависимости верхнего уровня, которые он перечисляет, присутствуют на устройстве CE. Я не могу проверить дальнейшее дерево, так как Depends затем ищет зависимости верхнего уровня на моей машине разработки, половина из которых отсутствует, так как они зависят от CE. Dependency Walker не запускается на устройстве CE (если нет версии CE, которую я пропустил?). Я попытался скопировать DLL с устройства CE на флеш-накопитель, чтобы я мог загрузить их в DW на моей машине разработки, но устройство не позволит мне это сделать. К сожалению, инструмент OEM, который у меня есть для передачи файлов, переносит только на устройство. [Редактировать: я не пробовал написать свой собственный инструмент, чтобы попытаться вытащить файлы с устройства на машину разработки.]

Некоторые сведения о том, как я настроил проект, в случае, если у меня есть некоторые ошибочные предположения относительно этого конец. Я пробовал с двумя проектами. У меня есть мой код (сам элемент ActiveX - это просто графическое представление некоторых данных, которые я изначально настроил в элементе управления Win32 ActiveX, чтобы увидеть, как он выглядит), а другой - чистый проект, созданный из шаблона, скомпилированный , загружается на устройство; код не добавлен или не изменен. Оба имеют тот же результат при попытке зарегистрироваться.

  • Использование VS2005, создание проекта с использованием шаблона «MFC Smart Device ActiveX Control», ориентированного на SDK, полученный мной от OEM.
  • В случае проекта с моим кодом в нем я скопировал код чертежа в проект и создал необходимые свойства для ввода данных. Я могу предоставить более подробную информацию о моем коде, если это поможет, но моя проблема возникает даже без кода. Я предполагаю, что, поскольку он успешно компилируется при таргетинге SDK от OEM, функции, которые я использую, должны быть доступны на целевом устройстве.
  • Создайте проект в конфигурации Release (я задавался вопросом, отсутствуют ли библиотеки отладки на целевом устройстве и что вызывает проблему).
  • Перенесите файл .ocx на целевое устройство с помощью OEM-инструмента.
  • Запустите командную строку на целевом устройстве, перейдите в каталог .ocx, запустите «regsvrce.exe .ocx». Я также попытался передать все файлы, которые VS оставляет в выходной папке сборки, но результат тот же.

Большое спасибо за любые ответы! Если вы увидите что-то очевидное - это мой первый проект ActiveX и мой первый проект CE, поэтому очень возможно, что я пропустил что-то основное.

+0

У вас есть надлежащие библиотеки MFC на устройстве (mfccexxx.dll, а также версия выпуска или отладки и т. Д.)? Я не помню, чтобы VS05 использовал более новые библиотеки MFC для связывания приложений, чем Platform Builder, помещал в образ ОС, но я подозреваю, что это так. Я знаю, VS 08 делает. – ctacke

+0

Устройство имеет mfcce400.dll. Как я могу проверить, какая библиотека VS используется для связи приложения? Я бы подумал, что VS2005 будет использовать ту же версию, что и Platform Builder в ОС, поскольку Platform Builder - это плагин для VS2005, но всегда полезно проверять допущения. – Eran

ответ

0

Поскольку вы строите OCX Я предполагаю, что вы используете MFC. Как вы связываетесь с MFC? Посмотрите в настройках проекта | Общие, попробуйте выбрать «Использовать MFC в статической библиотеке». То же самое касается ATL - попробуйте выбрать «Static Link to ATL» (если вы используете ATL). Это также относится к VCRT - в C/C++ | Code Generation, в «Runtime Library» попробуйте выбрать опции без «DLL» (т. Е. Статически связать с VCRT). Поскольку пустой OCX по умолчанию не работает для вас - это единственное, о чем я могу думать ... Другое дело - я полагаю, у вас есть причина для работы с Visaul Studio 2005? Почему не новая версия? Удачи, PazO

+0

Спасибо за предложения! Я использую MFC, и проект уже использовал MFC в статической библиотеке. Он не использовал ATL, поэтому я теперь попытался использовать ATL со статической ссылкой. Также не использовалась опция DLL в C/C++ | Code Generation. Ни один из этих параметров, по-видимому, ничего не изменит, поскольку он зарегистрирован на целевом устройстве .ocx. Я использую VS2005, потому что SDK не появляется при создании нового проекта в более поздних версиях. 2005 год также является единственной полной копией, которую я имею, поэтому я придерживаюсь ее, а не полагаюсь на пробные версии, если это возможно. – Eran

+0

Вы уверены, что ошибка 'dependency missing' ссылается на ваш OCX, а не на regsvrc.exe? Если это так, я могу только подумать об обновлении Visual Studio. У вас есть все «Экспресс» версии бесплатно, может быть, один из них может помочь? – PazO

+0

Я вполне уверен, что это относится к ocx. Когда я запускаю regsvrce, у меня появляется всплывающее окно с сообщением «Loadlibrary (« MyActiveX.ocx »). GetLastError возвращает 7e». Я попробую экспресс-версию и посмотрю, что что-то изменит. – Eran