Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/56: Рейтинг темы: голосов - 56, средняя оценка - 4.86
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1

Как использовать библиотеки, скомпилированные в Visual Studio, в Билдере?

10.07.2012, 13:05. Показов 11456. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У кого-нибудь получалось?
Пытался использовать так:
1) компилил dll в VS
2) получал lib из dll через implib.exe
3) использовал coff2omf для преобразования lib из coff в omf
4) подключал lib в проект билдера (Project->Add to project...)
5) пытался вызвать функцию
И в ответ unresolved external

Предполагаю, что проблема из формата таблицы экспорта в Visual Studio.
Как решить проблему - не знаю. Возможно нужно вручную создать DEF-файл (с таблицей экспорта), пока еще не пробовал такое делать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2012, 13:05
Ответы с готовыми решениями:

Зачем для создания формы на Angular использовать Visual Studio и Visual Studio Code?
Мне нужно написать форму на ангуляре, которая будет выполнять Select, Insert,Delete из базы данных. Нашла видео, в котором показывают...

Как использовать\подключать библиотеки D3D В RAD Studio?
Всем привет. Как использовать\подключать библиотеки D3D В RAD Studio ?

Как подключить библиотеки в Visual Studio 2010
Люди доюры помогите со следующей проблемой: Начинаю писать программу для ГИС Панорамы, если кто знает. Написал следующий код: //...

10
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.07.2012, 15:07
есть в билдере
impdef.exe
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
10.07.2012, 16:01  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
есть в билдере impdef.exe
т.е. извлечь с помощью него таблицу экспорта, вручную исправить все функции, подсунуть в проект VS и скомпилировать?
сработает ли?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2012, 19:46
https://www.cyberforum.ru/blog... og478.html + Внутри глава из книги Архангельского.

Да, а собственно что за либа? Могу попытаться прикрутить.

В большенстве случаев справляется coff2omf.
В других случаях- через def только нужно знать как правильно его править.

Добавлено через 45 минут
Как вариант всегда можно использовать динамический вызов (напрямую из dll) об этому есть здесь Dynamic-Link Library: Теория + Практика
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
10.07.2012, 21:24  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Да, а собственно что за либа? Могу попытаться прикрутить.
TagLib 1.7.2, хочу её прикрутить чисто из-за интереса. В ней есть инструкции (шаблонные), которые не понимает билдер.
Через CMake сгенерировал проекты для Visual Studio 10, затем скомпилировал. А прикрутить скомпилированную библиотеку к билдеру не получается.
Для билдера CMake не хочет компилить проект.

В других случаях- через def только нужно знать как правильно его править.
Похоже мой случай. Вот какой DEF у VS библиотеки:
C++
1
2
3
4
5
6
7
LIBRARY     TEST_DLL.DLL
 
EXPORTS
    ??0CMyClass@@QAE@XZ            @2   ; ??0CMyClass@@QAE@XZ
    ??4CMyClass@@QAEAAV0@ABV0@@Z   @3   ; ??4CMyClass@@QAEAAV0@ABV0@@Z
    ?show@CMyClass@@QAEXXZ         @4   ; ?show@CMyClass@@QAEXXZ
    show                           @1   ; show
А вот какой у Билдеровской библиотеки:
C++
1
2
3
4
5
6
7
LIBRARY     DLL.DLL
 
EXPORTS
    @CMyClass@$bctr$qv             @2   ; CMyClass::CMyClass()
    @CMyClass@show$qv              @3   ; CMyClass::show()
    ___CPPdebugHook                @4   ; ___CPPdebugHook
    _show                          @1   ; _show
Как переделывать DEF-файл - не понятно.

Обе библиотеки экспортируют:
C++
1
2
3
4
5
6
7
8
extern "C" class __declspec(dllexport) CMyClass
{
public:
    CMyClass();
    void show();
};
 
extern "C" __declspec(dllexport) void show();
Сама DLL от Visual Studio во вложении.
Вложения
Тип файла: rar vs_test_dll.rar (8.8 Кб, 39 просмотров)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2012, 22:27
Ну как я понял запихнуть класс в dll приходится идти на разные трюки.
Поэтому вообще не известно можно ли прикрутить dll-ку.

Как вариант найти чистые исходники и собирать их вместе с проектом(на Builder-е) как это делалось с либой lua.
Также можно попробывать исходники поместить в статическую либу Builder-а я пробывал так делать с тем же lua

А есть тест-пример к этой либе?

Добавлено через 12 минут
Просматриваю прикрепление... а где собственно хедер библиотеки test_dll.h ????

И еще либа тестилась на самой VC++ а то чет не догоняю как класс ты туда уместил( там же вроде как через вируальные ф-ции как-то делается)?

Добавлено через 17 минут
Что касается ф-ции show, то достаточно в def внести изменения
Code
1
 _show = show                           @1   ; show
Добавлено через 12 минут
Затем
Code
1
implib x-bcb.lib x.def
Подчеркивание нужно для Builder-а.
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
10.07.2012, 22:48  [ТС]
Жаль, что с классами из DLL такая проблема.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2012, 22:51
С классами я просто эту проблему не выяснял, поэтому может быть и возможно.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.07.2012, 22:59
Вот прикрутил вашу либу и вызвал ф-цию.
Правда пришлось переназвать вашу либу из test_dll.dll в testdll.dll b соответственно изменить в def-файле

И все же где потерялся хедер? Да и исходники какие-то одним словом не понятные.
Вложения
Тип файла: rar test_dll.rar (272.0 Кб, 77 просмотров)
0
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 17
25.10.2012, 22:28
здравствуйте, а вы бы не могли помочь при прикручивании библиотеки из VS в BCB) есть библиотека с исходниками в вс, надо ее в билдере использовать.. делаю вроде все по инструкции не работает, в билдере ошибка в h файле. помогите((( я прилагаю исходники библиотеки...ВСВ пишет

[BCC32 Error] SerialGate.h(40): E2092 Storage class 'extern' is not allowed here

строчка кода такая

C++
1
extern "C" class __declspec (dllexport)  SerialGate
Вложения
Тип файла: rar SerialGate.rar (30.2 Кб, 27 просмотров)
Тип файла: rar SerialGateSources.rar (49.1 Кб, 25 просмотров)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.10.2012, 01:32
Там классы используются ?

Насколько я знаю dll с классами не переносимы...

Добавлено через 10 минут
По крайней мере я не знаю как правильно работать с классами в dll и переносимо ли в Buidler
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
extern "C" class __declspec (dllexport)  SerialGate
{   
public:
    
    enum IN_LINES_NAME {CTS, DSR, RING, RLSD};
    enum OUT_LINES_NAME {DTR, RTS}; 
 
    SerialGate();
    ~SerialGate();  
 
    bool Open(int port, int baud);  
    int Send(char* buff, int szBuff);
    int Recv(char* buff, int szBuff);   
    void SetLine(OUT_LINES_NAME ln, bool state);
    bool GetLine(IN_LINES_NAME ln);
    void GetPortsInfo(PortInfo* pi);
    void Close();
    void Clean();
 
private:
    HANDLE m_hFile;
    bool state;
};
Добавлено через 32 минуты
Не знаю как в VC++ но в Builder как я понял extern "C" к классам не применяется.
Думаю стоит перекомпиливать dll на Builder, ну либо просто собрать статический lib под Builder

Добавлено через 2 часа 13 минут
Заглянул в исходники там непонятные дела творятся...
C++
1
2
3
4
5
6
extern "C" __declspec (dllexport) void SerialGate::SetLine(OUT_LINES_NAME ln, bool state)
{
    if(!state)
        return ;
//....
}
Зачем extern "C" __declspec (dllexport) в cpp-файле DLL-ки ?

Вообщем Dynamic-Link Library: Теория + Практика , а для случая с классами http://www.firststeps.ru/cbuilder/r.php?91
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2012, 01:32
Помогаю со студенческими работами здесь

Как добавлять дополнительные библиотеки в Visual Studio 2008?
Проблема такая- решил написать программу которая подключит комп к определённому Wi Fi, ну и решил погуглить, гуглил второй день, нашёл...

Как подключить библиотеки OpenCV 3.0.0 к visual studio 2012?
Как подключить библиотеки OpenCV 3.0.0 к visual studio 2012?

Как в visual studio 2008 добавить библиотеки opengl
Здравствйте, я скачал отсюда http://www.swiftless.com/tutorials/opengl/gldrivers.html библиотеки opengl, куда их кинуть чтоб они работали?

Как подключаются библиотеки в C++(Visual Studio 2017 или g++ на Linux)
Рылся в интернете, но толку не много. Расскажите пожалуйста, как устанавливаются/добавляются библиотеки на C++. Желательно в Visual...

Как подключить библиотеки TBitmap, TPoint и т.п. в проекте Visual Studio ?
Ребят у меня курсач на стеганографию, дело в том, что сам пример я нашел: https://www.cyberforum.ru/cpp-builder/thread103448.html . Но там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru