Страница 1 из 2
Unresolved External
Добавлено: 22 Август 2011, 13:03
Алексей- Софт-Центр
Добрый день!
Кларион 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
Алексей
Re: Unresolved External
Добавлено: 22 Август 2011, 15:17
Игорь Столяров
Сам не пользовался - но судя по ошибке и описанию: см.
http://www.pinvoke.net/default.aspx/set ... sDevs.html
последний параметр DWFlags INT, что соответсвуют кларионовскому двухбайтовому USHORT, но не как не четырех-байтовому LONG ...
Re: Unresolved External
Добавлено: 22 Август 2011, 15:30
Дед Пахом
MultiByteToWideChar уже есть в стандартной Clarion win32.lib, которая автоматом линкуется к exe, а про 'Setapapi.DLL клара слыхом не слыхивала. Вам надо либмейкром сделать lib-файл и включить его в проект.
Re: Unresolved External
Добавлено: 22 Август 2011, 15:49
Игорь Столяров
Если бы не было LIB файла - программа не собралась бы ... А человек пишет об ошибке уже на этапе выполнения. (В кнопке вызываю ...)
Re: Unresolved External
Добавлено: 22 Август 2011, 16:20
Дед Пахом
Unresolved External SETUPDIGETCLASSDEVS in progr001.obj
Это не этап выполнения

Re: Unresolved External
Добавлено: 22 Август 2011, 16:34
Игорь Столяров
Дед Пахом писал(а):Unresolved External SETUPDIGETCLASSDEVS in progr001.obj
Это не этап выполнения

Согласен ... Всегда запоминается последняя фраза ...

Re: Unresolved External
Добавлено: 23 Август 2011, 12:34
Алексей- Софт-Центр
Добрый день!
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
Алексей
Re: Unresolved External
Добавлено: 23 Август 2011, 13:08
Игорь Столяров
Попробуй описание прототипа
SetupDiGetClassDevs(LONG,LONG,LONG,USHORT),LONG,PASCAL,RAW,NAME('SetupDiGetClassDevsA')
Re: Unresolved External
Добавлено: 23 Август 2011, 13:26
Алексей- Софт-Центр
Добрый день!
Попробовал!
ОГРОМНОЕ СПАСИБО!
Заработало!!!!
Алексей
Re: Unresolved External
Добавлено: 23 Август 2011, 13:40
Игорь Столяров
Алексей- Софт-Центр писал(а):Добрый день!
Попробовал!
ОГРОМНОЕ СПАСИБО!
Заработало!!!!

Алексей
Да, пожалуйста ... Просто набрал функцию в яндексе, перешел на описание в мсдн и Вам написал ответ.
Сей "иннтелектуальный" метод поиска и устранения подобных проблем - рекомендую использовать в дальнейшей работе ...

Re: Unresolved External
Добавлено: 23 Август 2011, 14:40
Алексей- Софт-Центр
Добрый день!
Просто набрал функцию в яндексе, перешел на описание в мсдн и Вам написал ответ.
Все верно! Я так тоже делаю, но !!!!!!!!! Самое главное здесь: как Вы определили, что name этой функции с буковкой "А" в конце?
Алексей
Re: Unresolved External
Добавлено: 23 Август 2011, 15:11
Игорь Столяров
Алексей- Софт-Центр писал(а):Самое главное здесь: как Вы определили, что name этой функции с буковкой "А" в конце ?
Еще проще. Вы же сами написали:
Алексей- Софт-Центр писал(а):1. Сделал либмейкером lib - файл
А когда Вы открыли "либмейкером" DLL (или LIB) файл - то там в списке написано наименование функций которые "живут" в этом файле ...
Если имя функции, не совпадает с наиименованием функции в DLL файле - то указываем имя через NAME ...
В принципе, будет работать описание: SetupDiGetClassDevsA(LONG,LONG,LONG,USHORT),LONG,PASCAL,RAW
но тогда нужно вносить исправления в код программы и кстати нужно понимать почему вообще имена расходятся:
1. Разные версии одной и той же функции в разных версиях WinAPI ("старое" имя оставляется для совместимости)
2. Различная реализация одной и той же функции для ANSI и UNICODE (как праило отличаются "A"(NSI) и "W"(ide) в хвосте имени)
Вот и вся война ...

Re: Unresolved External
Добавлено: 23 Август 2011, 15:34
Алексей- Софт-Центр
Добрый день!
Еще раз спасибо, Игорь!
Алексей
Re: Unresolved External
Добавлено: 23 Август 2011, 16:47
Дед Пахом
"Мы отважные герои очень маленького роста" И нам спасибы не полагаются...
Re: Unresolved External
Добавлено: 23 Август 2011, 17:21
Игорь Столяров
(С) "Семнадцать мгновений весны":
Игорь Столяров писал(а):Всегда запоминается последняя фраза ...
