LoadLibrary () код ошибки 127

Вы можете выполнить

tableColumnManufacturer.setCellValueFactory(cellData -> 
    new ReadOnlyStringWrapper(cellData.getValue().getManufacturer().getName());

Метод setCellValueFactory ожидает объект Callback<CellDataFeatures<Carmodel, String>, ObservableValue<String>>. Следовательно, cellData в этом коде является объектом CellDataFeatures<Carmodel, String>, а cellData.getValue() дает объект CarModel для строки. Затем cellData.getValue().getManufacturer().getName() дает требуемое значение; вам просто нужно обернуть его в ReadOnlyObservableWrapper, чтобы получить ObservableValue<String>, содержащее это значение.

18
задан Adam Tegen 27 June 2009 в 17:28
поделиться

4 ответа

Сообщение об ошибке означает, что найдена соответствующая DLL, но отсутствует требуемый экспорт процедуры. У вас правильная версия библиотеки DLL?

Вы можете использовать dumpbin.exe , чтобы проверить, какие функции экспортирует ваша DLL, и проверить орфографию.

4
ответ дан 30 November 2019 в 02:45
поделиться

У вас есть несоответствие между временем выполнения, используемым для вашего приложения и DLL?

Проблема, которая укусила меня с VS 2005 в прошлом, заключается в том, что одна часть построена как сборка Release а другой - как сборка отладки. Они втягивают разные версии библиотек времени выполнения Microsoft, которые несовместимы, поскольку в данном процессе может быть загружена только одна.

Я думаю, что причина появления ошибки 127 заключается в том, что ваша DLL ищет функцию в загруженной среде выполнения. DLL, которого нет, потому что это неправильная среда выполнения.

2
ответ дан 30 November 2019 в 02:45
поделиться

Две мои догадки
1. LoadLibrary вызывает DllMain указанной DLL (при первой попытке подключения к процессу). Длинный выстрел, но есть ли оно?
2. LoadLibrary загрузит указанную DLL и все ее зависимости. Поэтому, если зависимый модуль библиотеки DLL не может быть обнаружен в пути поиска, что приведет к сбою загрузки - вы можете использовать файл depends.exe для проверки - доступен здесь

2
ответ дан 30 November 2019 в 02:45
поделиться

Давайте рассмотрим это шаг за шагом:

  1. Сообщение об ошибке означает, что dll найдена, но отсутствует необходимая функция. (Jitter прав.) Это означает, что у вас есть необходимая dll, но не той версии. (Davefiddes прав, хотя проблема может быть в любой dll, а не только в библиотеке времени выполнения Microsoft. И, по крайней мере, для крупных обновлений Microsoft дает своим библиотекам времени выполнения другие имена, так что в этом случае это не будет проблемой.)

  2. Это не имеет смысла, потому что никакая функция не была запрошена у загружаемой dll. (Адам прав.)

  3. Поэтому ожидалось, что недостающая функция будет найдена не в той dll, которая явно загружается командой LoadLibrary, а в зависимой dll, которая неявно загружается в то же время, потому что первая dll требует ее. (Zebrabox был близок к этому.)

  4. Зависимая dll - это dll, которая "статически" связана с явно загружаемой библиотекой через библиотеку импорта или .lib-файл, включенный на этапе компоновки явно загружаемой dll. (Держу пари, вы не знали, что "динамическая библиотека" может быть "статически связанной". Что ж, теперь знаете.)

  5. Если у вас несколько версий одной и той же dll в разных папках, то это также может быть проблемой пути поиска (как предлагает zebrabox). Порядок поиска путей Dll сам по себе является сложной темой: см. http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx . Он зависит, помимо прочего, от операционной системы. Самым безопасным вариантом, где это возможно, является размещение всех потенциально проблемных dll в той же папке, что и exe.

  6. Зависимые dll могут также иметь свои собственные зависимые dll, что может сделать эту проблему очень трудноразрешимой. Depends может помочь, но если это не поможет, попробуйте filemon. Последняя успешно прочитанная dll перед сообщением об ошибке - это та, которая имеет неправильную версию.

28
ответ дан 30 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: