![]() |
|
![]() ![]() ![]() |
|
Alexander06 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Здравствуйте.
Мне необходимо подключить к проекту С++Builder библиотеку, предназначенную для MS VS. В dll располагаются драйвера к аппаратуре, имеется lib, dll и h-файлы, предназначенные для Visual Studio. При подключении lib-файла ругается на COFF. Попробовал 2 решения: 1. Создание промежуточной lib-библиотеки. С помощью IMPLIB создал .lib для dll-ки, затем подключил ее к проекту, dll положил рядом в папку проекта. На несоответствие COFF/OMF больше не ругается, но при линковке выдает ошибку:
Насколько я понимаю, это свидетельствует о неподходящей библиотеке. 2. Конвертация lib-файла в совместимый с Builder-ом формат. Использовал утилиту coff2omf.exe В результате получился другой lib-файл, несколько меньшего размера(14 против 19 кб). Его подключение к проекту приводит к тем-же результатам
Что меня настораживает - lib-файл поставки производителя в 7 раз меньше dll-ки. Значит ли это, что он неполный? Подскажите пожалуйста, что еще можно попробовать. Правильно ли я понимаю, что вызов функций с помощью GetProcAdress из исходной (MSVS) dll-ки мне не поможет? |
||||
|
|||||
Лапоть |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 3.4.2009 Репутация: 1 Всего: 2 |
Вот тут почитай - http://www.arm9.ru/index.php?book=80&pg=ch16lev1sec7
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
|
|||
|
||||
Alexander06 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Я раньше думал, что COFF2OMF делает из lib-файла его аналог с другими вызовами функций.
Заметил, что получаемый lib в 7 раз меньше исходного. Насчет динамического подключения dll насторожило...это что-же, если у меня только dll на руках, возможно я вообще им не воспользуюсь? Как-то жутковато. Это сообщение отредактировал(а) Alexander06 - 23.6.2009, 17:47 |
|||
|
||||
Alexander06 |
|
||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Действую сообразно вышеуказанной(http://www.arm9.ru/index.php?book=80&pg=ch16lev1sec7) ссылке, а так же нескольким другим описаниям
http://bcbjournal.org/articles/vol4/0012/U...6d07e0480124071 http://www.devarticles.com/c/a/Cplusplus/D...ions-Part-II/3/ Последовательность действий следующая: 1. С помощью IMPDEF создаю def-файл для исходной dll. Вот его фрагмент:
2. Правлю его следующим образом:
Подозреваю, что это ничего не меняет, но все равно сделал 3. С помощью IMPLIB, def и dll файлов создаю vtex1048_32.lib
4. Проверяю экспортируемые функции с помощью TLIB. получаю файл со следующим содержимым
5. Добавляю в проект хедер
6. Добавляю в проект созданный vtex1048_32.lib dll лежит рядом с lib-ом в папке проекта На этапе линковки выдает прежнее сообщение
Даже и не знаю, что еще попробовать ![]() |
||||||||||||
|
|||||||||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А если #include "vtex1048.h" не делать - все равно ругается 'Unable to open file'?
Кстати, как точно выглядит ругань, а то форум сделал из нее набор китайских иероглифов, мне кажется, что оригинал был не такой ![]() |
|||
|
||||
Alexander06 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Если я не подключу хедер, то он ругается на вызов неизвестных функций и не компилируется, так как в хедере и функции и все необходимые типы.
Точно эта ругань выглядит как квадратики и в конце, перед ".OBJ" символ, похожий на 'A' ![]() Если добавляю директиву
то все компилируется и линкуется. Но при запуске приложение виснет даже не появившись, сразу после загрузки "cc3290mt.dll" (use dynamic RTL - true) или после загрузки "WINMM.dll" (use dynamic RTL - false) . Это сообщение отредактировал(а) Alexander06 - 24.6.2009, 19:13 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Вот, а я говорил
![]()
Попробуй загрузить dll динамически (через LoadLibrary) Это сообщение отредактировал(а) xvr - 24.6.2009, 20:12 |
|||
|
||||
Alexander06 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
То есть вы имеете ввиду, что при статическом вызове библиотека цепляет с собой несовместимые с Builder'ом dll, которые вешают borland-программу?
А динамический вызов их затронуть не должен, да? Честно говоря я несколько в шоке от этих открывающихся перспектив. Спасибо, попробую к dll-обращаться, но вы ответьте, пожалуйста, верно ли я все понял. |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Угу
![]()
![]() |
||||||
|
|||||||
GraNit |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Здравствуйте, уважаемые господа!
Думаю, что столкнулся с подобной проблемой, только "переподвыперевет" у меня по сложнее. Суть проблемы: 1. Есть два lib файла работающие с эфемеридами НАСА. Написаны для MSVC 2. Пишу "переходник" на MSVS 2010 в виде dll 3. Прикручиваю к своему проекту на BCB 6.0 (проект уже почти готов, поэтому переделывать его под MSVC очень уж долго). DLL загружаю динамически. Проблема: Нужная мне функция вызывается, но параметр, который я ей передаю искажается. Параметр - это указатель на строку. Перерыл уже все что можно, нигде нет ответа. У всех все работает без проблем, только у меня все никак у людей ![]() Для Alexander06, вот мои потуги с вызовом функции (у меня работает). Может быть вам поможет. Заодно посмотрите, пожалуйста, почему я не получаю FileName в нормальном виде? Буду премного благодарен ![]() Это хейдер для DLL-ки MSVC
Это код DLL из MSVC
Это def файл. Получил его с помошью impdef.exe
Это вызов функции в программе BCB из dll
P.S. В BCB получаю сообщение: "FileName is: й)(" Это сообщение отредактировал(а) GraNit - 29.7.2014, 09:51 |
||||||||
|
|||||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Любым не статическим функциям членам класса передается скрытый параметр this. Вы же его не передали.
|
|||
|
||||
GraNit |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Пожалуйста, по подробнее про этот параметр.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Ваша функция имеет такой прототип (если вызывать ее как С функцию):
|
|||
|
||||
GraNit |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Да это не я
![]() Когда создавал проект, все само так завернулось ![]() Спасибо за подсказку, буду пробовать. Убрал класс и все заработало. Огромное спасибо, однако с классами всеравно придется разбираться, когда-нибудь. Это сообщение отредактировал(а) GraNit - 30.7.2014, 04:31 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |