Подключение Lib библиотеки к C++ Builder 6
От: smithana  
Дата: 16.03.13 11:32
Оценка:
Есть у меня набор ПО в виде драйвера и статической библиотеки, содержащая в себе набор функций для работы с драйвером.
Раньше её добавляли в проекты VS и всё было хорошо. Теперь решили добавлять к C++ BUILDER 6.
Т.к. библиотека сделана в VS, то её пришлось конвертироваться с помощью утилиты coff2omf под билдер.

Создаю в билдере консольное окно, выбираю Си++, снимаю use VCL и Multi threaded.
Инклуды выглядят так:

#include <iostream.h>
#include "windows.h"
typedef unsigned int UINT32;
typedef unsigned char UINT8;
#pragma comment(lib, "MyLib.lib")
#include "MyClass.h"
#pragma hdrstop
#pragma argsused

тело — обычный хелло ворд:
int main(int argc, char* argv[]){
cout<<"Hello world!";
cin.get(); cin.get();
return 0;
}

Консоль запускается и пишет хелло ворд.

но стоит в главную функцию добавить создание объекта моего класса:
CMyClass obj;

как вылетают ошибки:
[Linker Error] Unresolved external 'CMyClass::~CMyClass()' referenced from D:\...\UNIT1.OBJ
[Linker Error] Unresolved external 'CMyClass::CMyClass()' referenced from D:\...\UNIT1.OBJ

пробовал
#pragma comment(lib, "MyLib.lib")
заменить на добавление библиотеки в проект через Project->Add to project
ничего не поменялось.

Я так понимаю что прога видит объявление конструктора и деструктора в MyClass.h, а их тела в MyLib.lib нет.
подскажите пожалуйста, что я не так делаю, или что ещё доделать надо?
Re: Подключение Lib библиотеки к C++ Builder 6
От: pva  
Дата: 16.03.13 21:38
Оценка:
Здравствуйте, smithana, Вы писали:

S>Я так понимаю что прога видит объявление конструктора и деструктора в MyClass.h, а их тела в MyLib.lib нет.

S>подскажите пожалуйста, что я не так делаю, или что ещё доделать надо?
Перекомпилируйте свою либу в билдере, чтоб была как родная.
Может получится решить проблему явным использованием конвенций, типа __stdcall. Попробуйте также поиграться с extern "C"
newbie
Re[2]: Подключение Lib библиотеки к C++ Builder 6
От: smithana  
Дата: 17.03.13 17:25
Оценка:
Здравствуйте, pva, Вы писали:

pva>Перекомпилируйте свою либу в билдере, чтоб была как родная.


ну вот это завтра попробую, а

pva>Может получится решить проблему явным использованием конвенций, типа __stdcall. Попробуйте также поиграться с extern "C"


играться желания никакого нет. В будущем ещё и к QT подключать надо будет, так что думаю вообще весь функционал библиотеки в драйвер запихать.
Re[3]: Подключение Lib библиотеки к C++ Builder 6
От: smithana  
Дата: 25.03.13 14:34
Оценка:
Понял в чём разница.
в lib файле студии хранятся тела функций, а в lib файле билдера, только их заголовки(судя по тому что показывает просмотр по f3 в коммандере).
Это объясняет так сильно уменьшившийся размер библиотеки. (VS 300 кб, билдер 1 кб.)
Попробовал билдеру ещё подсунуть MyClass.obj студии, получил ошибку Error processing module.

Отсюда два вопроса:
есть ли у утилиты com2omf какие-либо ключи для конвертирования?
и можно-ли как-то сконвертировать студийный *.obj файл в билдерный формат?
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.