Unresolved External

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Unresolved External

Сообщение Алексей- Софт-Центр »

Добрый день!
Кларион 6, АВС.
Ошибка : Unresolved External SETUPDIGETCLASSDEVS in progr001.obj
Для двух библиотек сделал один в один. С одный работает ('Windows.DLL'), с другой ('Setapapi.DLL') лепит такую ошибку.
1. Global embeds: after global includes:
INCLUDE('WINAPI.CLW','Equates')
2.Global embeds: inside the global maps:
MODULE('Setapapi.DLL')
SetupDiGetClassDevs( |
LONG GUID, |
LONG PCTSTR, |
LONG HWND, |
LONG DWFlags |
) ,LONG,PASCAL,RAW
end
MODULE('Windows.DLL')
WideCharToMultiByte( |
ULONG CodePage, |
LONG dwFlags, |
LONG lpWideCharStr, |
LONG cchWideChar, |
LONG lpMultiByteStr, |
LONG cbMultiByte, |
LONG lpDefaultChar, |
LONG lpUsedDefaultChar |
),LONG,PASCAL,RAW
end
3. В кнопке вызываю :
stop(SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES))
Выдает вышеназванную ошибку!
4. В кнопке вызываю:
ttt#= MultiByteToWideChar(1251,0,address(DataToEncode),lenall,address(kkk[1]),0)
Все в порядке!

Естественно , что все библиотеки есть и лежат в папке программы ( в системных папках результат тот же).

Как сдвинуть эту ошибку? (уже месяц бьюсь)
Описание функции:
http://msdn.microsoft.com/en-us/library ... S.85).aspx

Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

Сам не пользовался - но судя по ошибке и описанию: см. http://www.pinvoke.net/default.aspx/set ... sDevs.html
последний параметр DWFlags INT, что соответсвуют кларионовскому двухбайтовому USHORT, но не как не четырех-байтовому LONG ...
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Unresolved External

Сообщение Дед Пахом »

MultiByteToWideChar уже есть в стандартной Clarion win32.lib, которая автоматом линкуется к exe, а про 'Setapapi.DLL клара слыхом не слыхивала. Вам надо либмейкром сделать lib-файл и включить его в проект.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

Если бы не было LIB файла - программа не собралась бы ... А человек пишет об ошибке уже на этапе выполнения. (В кнопке вызываю ...)
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Unresolved External

Сообщение Дед Пахом »

Unresolved External SETUPDIGETCLASSDEVS in progr001.obj
Это не этап выполнения ;-)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

Дед Пахом писал(а):
Unresolved External SETUPDIGETCLASSDEVS in progr001.obj
Это не этап выполнения ;-)
Согласен ... Всегда запоминается последняя фраза ... ;)
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Unresolved External

Сообщение Алексей- Софт-Центр »

Добрый день!
1. Сделал либмейкером lib - файл
2. Убрал из глобала описание функции
3. Добавил процедуру с именем SetupDiGetClassDevs с типом external (lib)
4. Подцепил ее вызов из setapapi.lib
5. В прототипе указал (long,long,long,Ushort),long
дает ошибку

Unresolved External SETUPDIGETCLASSDEVS@FlllUs in progr001.obj

Если в прототипе указываю (long,long,long,long),long
дает ошибку

Unresolved External SETUPDIGETCLASSDEVS@Fllll in progr001.obj

Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

Попробуй описание прототипа

SetupDiGetClassDevs(LONG,LONG,LONG,USHORT),LONG,PASCAL,RAW,NAME('SetupDiGetClassDevsA')
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Unresolved External

Сообщение Алексей- Софт-Центр »

Добрый день!


Попробовал!
ОГРОМНОЕ СПАСИБО!
Заработало!!!! :)


Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

Алексей- Софт-Центр писал(а):Добрый день!
Попробовал!
ОГРОМНОЕ СПАСИБО!
Заработало!!!! :)
Алексей
Да, пожалуйста ... Просто набрал функцию в яндексе, перешел на описание в мсдн и Вам написал ответ.
Сей "иннтелектуальный" метод поиска и устранения подобных проблем - рекомендую использовать в дальнейшей работе ... ;)
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Unresolved External

Сообщение Алексей- Софт-Центр »

Добрый день!
Просто набрал функцию в яндексе, перешел на описание в мсдн и Вам написал ответ.
Все верно! Я так тоже делаю, но !!!!!!!!! Самое главное здесь: как Вы определили, что name этой функции с буковкой "А" в конце?

Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

Алексей- Софт-Центр писал(а):Самое главное здесь: как Вы определили, что name этой функции с буковкой "А" в конце ?
Еще проще. Вы же сами написали:
Алексей- Софт-Центр писал(а):1. Сделал либмейкером lib - файл
А когда Вы открыли "либмейкером" DLL (или LIB) файл - то там в списке написано наименование функций которые "живут" в этом файле ...
Если имя функции, не совпадает с наиименованием функции в DLL файле - то указываем имя через NAME ...

В принципе, будет работать описание: SetupDiGetClassDevsA(LONG,LONG,LONG,USHORT),LONG,PASCAL,RAW
но тогда нужно вносить исправления в код программы и кстати нужно понимать почему вообще имена расходятся:
1. Разные версии одной и той же функции в разных версиях WinAPI ("старое" имя оставляется для совместимости)
2. Различная реализация одной и той же функции для ANSI и UNICODE (как праило отличаются "A"(NSI) и "W"(ide) в хвосте имени)

Вот и вся война ... ;)
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Unresolved External

Сообщение Алексей- Софт-Центр »

Добрый день!
Еще раз спасибо, Игорь!

Алексей
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Unresolved External

Сообщение Дед Пахом »

"Мы отважные герои очень маленького роста" И нам спасибы не полагаются...
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Unresolved External

Сообщение Игорь Столяров »

(С) "Семнадцать мгновений весны":
Игорь Столяров писал(а):Всегда запоминается последняя фраза ... ;)
Make Clarion Great Again ! 😎
Закрыто