Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > DLL MS Visual Studio в C++Buiilder


Автор: Бегемот 18.3.2014, 05:39
Всем привет.

Прошу помощи по следующему вопросу.

Имеется DLL. С ней lib и h в комплекте. Пытаюсь использовать библиотеку с применением статического сособа загрузки. Подключаю h-файл, добавляю к проекту lib-файл, все это вместе с dll в папку с проектом. Компилирую... получаю ошибку
Код

[Linker Error] 'C:\App\pcb.LIB' contains invalid OMF record, type 0x21 (possibly COFF)


Гуглю, понимаю, что библиотека создана в Visual Studio. Нахожу метод конвертации
Код

сoff2omf src.lib dst.lib 

Проверяю. Получаю lib размер которой 500 байт против 250 кбайт. Понимаю, что не гут.
Дальше решил так
Код

implib new.lib my.dll

Получаю lib размеров 150 кбайт. Подключаю к проекту.  И далее, если вызываю функцию из библиотеки, то работает, а вот если пытаюсь создать объект класса, то получаю сообщения, что не найдены конструктор и деструктор. Полагаю так, что если хоть что-то вызывается из библиотеки, значит lib прилинковался. Как же тогда создать объект класса?
Код

[Linker Error] Unresolved external 'PCBClass::PCBDevice::~PCBDevice()' referenced from C:\App\MAIN.OBJ
[Linker Error] Unresolved external 'PCBClass::PCBDevice::PCBDevice()' referenced from C:\App\MAIN.OBJ

Автор: xvr 19.3.2014, 13:48
Цитата(Бегемот @  18.3.2014,  05:39 Найти цитируемый пост)
Как же тогда создать объект класса?

Никак. У MS VC и Borland C++ Bulder несовместимые объектные модели. И способы манглинга С++ имен тоже разные, т.ч. даже обычную С++ функцию не удасться вызвать

Автор: GraNit 29.7.2014, 10:23
Не знаю как на счет C++, у меня получилось вызвать фукнкцию члена класса, только подключал к проекту динамически а не статически. Могу кинуть свой пример, однако  в нее я никак не могу передать параметр. Думаю, что проект dll неправильно собираю. Что-то в настройках не так.

Чтобы не быть голословным, ссылка на мой http://forum.vingrad.ru/index.php?showtopic=264228&view=findpost&p=2617903.

Автор: Akira 28.9.2014, 00:30
Вариантов немного:
1. собирать из исходников, попутно убирая ms зависимые части.
2. конвертировать obj / lib файлы.
3. собрать dll в студии.
4. использовать сторонний линкер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)