Отсутствует зависимость для .ocx в Windows CE 6.0

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

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

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

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

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


person Eran    schedule 12.02.2014    source источник
comment
У вас есть соответствующие библиотеки MFC на устройстве (mfccexxx.dll, а также версия выпуска или отладки и т. Д.)? Я не помню, использовала ли VS05 более новые библиотеки MFC для связывания приложений, чем Platform Builder помещает в образ ОС, но я подозреваю, что это так. Я знаю, что VS 08 делает.   -  person ctacke    schedule 12.02.2014
comment
В устройстве есть mfcce400.dll. Как я могу проверить, какую библиотеку VS использует для связывания приложения? Я бы подумал, что VS2005 будет использовать ту же версию, что и Platform Builder в ОС, поскольку Platform Builder - это плагин для VS2005, но всегда полезно проверять предположения.   -  person Eran    schedule 13.02.2014


Ответы (1)


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

person PazO    schedule 12.02.2014
comment
Спасибо за предложения! Я использую MFC, и проект уже использовал MFC в статической библиотеке. Он не использовал ATL, поэтому теперь я попытался использовать ATL и со статической ссылкой. Также не использовалась опция DLL в C / C ++ | Генерация кода. Ни один из этих параметров, похоже, ничего не меняет в том, что касается регистрации .ocx на целевом устройстве. Я использую VS2005, потому что SDK не отображается при создании нового проекта в более поздних версиях. 2005 также является единственной полной копией, которая у меня есть, поэтому я придерживаюсь ее, а не полагаюсь на пробные версии, если это возможно. - person Eran; 13.02.2014
comment
Вы уверены, что ошибка «зависимость отсутствует» относится к вашему OCX, а не к инструменту regsvrc.exe? Если так, то я могу думать только об обновлении Visual Studio. У вас есть все «экспресс-версии» бесплатно, может быть, вам поможет одна из них? - person PazO; 13.02.2014
comment
Я почти уверен, что это относится к ocx. Когда я запускаю regsvrce, я получаю всплывающее окно с сообщением, что Loadlibrary (MyActiveX.ocx) не удалось. GetLastError возвращает 7e. Я попробую экспресс-версию и посмотрю, изменится ли что-нибудь. - person Eran; 13.02.2014
comment
Мой последний совет: (а) использовать поддерживаемый Visual Studio (я думаю, 2005 год больше не поддерживается MS), а затем (б) обратиться в службу поддержки Microsoft, поскольку кажется, что самые основы здесь не работают ... - person PazO; 15.02.2014