Я хотел бы перенести DLL, скомпилированную для Windows Embedded Compact 7, в среду Windows CE 5.0/6.0. Я совершенно уверен, что целевой язык ассемблера совместим, но из моих экспериментов выяснилось, что в DLL в WEC 7 есть что-то фундаментальное, чем в WCE 5. Кто-нибудь знает, что конкретно отличается от того, как DLL компилируются в WEC 7? чем в WCE 5/6?
Как перенести Windows Embedded Compact 7 DLL на Windows CE 5.0/6.0?
- Кстати, это неуправляемая C++ DLL (не .NET). 06.02.2018
- Также программа работает под WCE 5, но зависает без сообщения об ошибке. Если бы это была проблема с искажением имени или зависимостями, я бы ожидал, что DLL или программа даже не загрузятся, как это было до того, как у меня были правильные зависимости. 06.02.2018
Ответы:
Я предполагаю, что исходный код для этой dll недоступен, что может затруднить ее использование в более ранних версиях Windows CE.
В более новых версиях CE в библиотеку CRT добавлены функции безопасности, поэтому, если dll зависит от какой-либо из них, она не будет работать в более ранних версиях.
Помимо целевой архитектуры, образы ОС также должны быть созданы с использованием аналогичного набора функций OS/SYSGEN, иначе, опять же, dll может не загрузиться или не запуститься, если эти зависимости не будут удовлетворены.
dll может пытаться динамически загружать другие dll или полагаться на поведение ОС, специфичное для CE 7.0.
Короче говоря, потенциально очень сложная задача без исходного кода.
Для начала можно использовать инструмент Microsoft dumpbin
с параметром /imports
для создания списка dll и точек входа, от которых зависит dll. Точно так же используйте dumpbin /exports
в более ранних сборках Windows CE, на которых вы хотите использовать dll, чтобы увидеть, какие точки входа доступны, и работать с ними.
Другой подход, если у вас есть доступ к Platform Builder и вы можете самостоятельно создавать образы ОС, заключается в использовании отладчика ядра для проверки того, что происходит при загрузке dll.