Здарвствуйте! Создал два проекта в VS2008 (x32 в Win7):
— геlib.LIB -- там функция, которая должна вызваться из EXE
— CalLIB.EXE -- тут вызов функции из LIB
Но EXE-проект не собирается.
В свойства проекта добавил нужные ссылки
— С/С++-Доп.каталоги включения=..\..\utlib\utlib
— Компоновщик-Доп.каталоги библиотек=..\..\utlib\Debug
— Ввод-Доп.зависимости=..\..\utlib\Debug\utlib.lib
Здравствуйте, bURov, Вы писали:
UR>Здарвствуйте! Создал два проекта в VS2008 (x32 в Win7): UR>- геlib.LIB -- там функция, которая должна вызваться из EXE UR>- CalLIB.EXE -- тут вызов функции из LIB UR>Но EXE-проект не собирается.
UR>В свойства проекта добавил нужные ссылки UR>- С/С++-Доп.каталоги включения=..\..\utlib\utlib UR>- Компоновщик-Доп.каталоги библиотек=..\..\utlib\Debug UR>- Ввод-Доп.зависимости=..\..\utlib\Debug\utlib.lib
UR>Вызов записан так: UR>
B>В библиотеки должно быть описано, что класс экспортируется. B>В программе — импортируется.
__declspec(dllexport) int hash();
__declspec(dllimport) int hash();
Так?
А это в cpp-файле или в h-файле?
В каком месте в тексте?
B>В библиотеки должно быть описано, что класс экспортируется. B>В программе — импортируется.
Значит для LIB-варианта недостаточно только создать LIB-файл в LIB-проекте студии.
Может быть нужно ещё дополнительно подготовить утилитой-библиотекарем LIB?
Здравствуйте, bURov, Вы писали:
B>>В библиотеки должно быть описано, что класс экспортируется. B>>В программе — импортируется. UR>Значит для LIB-варианта недостаточно только создать LIB-файл в LIB-проекте студии. UR>Может быть нужно ещё дополнительно подготовить утилитой-библиотекарем LIB?
Либу же тоже сам делал?
Тогда сделай для простоты либу с одной функцией сложения и разбирайся как оно должно быть.
Потом когда поймешь — заводи эту.
Быстрее будет.
BE>Либу же тоже сам делал? BE>Тогда сделай для простоты либу с одной функцией сложения и разбирайся как оно должно быть. BE>Потом когда поймешь — заводи эту. BE>Быстрее будет.
Да, сам. И там и есть функция "hash", которая пока ничего не делает (катсти, я проектик для студии прицепил). Эта единственная функция в классе "utlib", разве что ещё конструктос деструктором, что по-умолчанию с клссом создались.
И я вот и разбираюсь, чтобы просто все собралось без ошибок и вызов функции получился.
BE>В интернете же полно примеров. BE>Вот простейший: How to Create and Implement Static Library in VC++ BE>Дальше создали консольное приложение.
Ну мне же не консольное EXE нужно.
Мне с диалогами, контролами. Я его и пытаюсь собрать.
По интеренту я полазил достаточно.
И там, да, упирают все примеры в консольное EXE.
Сейчас по форумам ищу. Все вроде предлагают то, что я уже и сам выполнил.
А сборка не идет ((
Здравствуйте, bURov, Вы писали:
UR>Мне с диалогами, контролами. Я его и пытаюсь собрать. UR>По интеренту я полазил достаточно. UR>И там, да, упирают все примеры в консольное EXE. UR>Сейчас по форумам ищу. Все вроде предлагают то, что я уже и сам выполнил. UR>А сборка не идет ((
А вы уверены, что пихать диалоги и контролы в либу это хороший вариант?
BE>А вы уверены, что пихать диалоги и контролы в либу это хороший вариант?
В принципе, почему бы и нет, НО.
Я не в либу их пихаю, а в EXE.
А либу строю не как виндовс-приложение или консольное, а как статичесое.
Здравствуйте, bURov, Вы писали:
UR>>>Получаю ошибку UR>>>http://files.rsdn.ru/95990/ERR_LNK2019.png pik>>_cdecl в LIBе убери UR>Я _cdecl не задаю -- это в ошибке студия пишет.
UR>
Здравствуйте, bURov, Вы писали:
UR>__cdecl (/Gd) -- это один из трех ключей компилятора для EXE-файла (+ fastcall, stdcall) BE>>static попробуй убрать. UR>Завтра попробую.
Добейся работы
int hash()
{
return 0;
}
а потом постепенно навешивай навороты. Тогда и поймешь в чем проблема.
C>а у тебя оба проекта используют unicode character set? C>а то по ходу екзешник пользует multibyte a либа unicode
Точно, недосмотрел! Я зачем-то отключил в EXE unicode.
Сейчас опробовал оба проекта и в unicode и в multibyte.
То же самое (на сборку проекта не влияет, м.б. при выполнении будут грабли).
Здравствуйте, carpenter, Вы писали:
C>Здравствуйте, bURov, Вы писали:
UR>>Не пойму, зачем это мне.
C>Это называется интерес, а где есть интерес, там будет и профессионализм
Кстати, да. Зачем он там? Всегда писали, но вот зачем?
Здравствуйте, bURov, Вы писали:
UR>Ещё нужно было для либы задать ключик "/MTd" (многопоточная), UR>а был "MDd" (многопоточная DLL).
Этот ключик должен быть одинаковый у всех проектов солюшена. По крайней мере, у всех тех, которые статически линкуются друг с другом.
Вообще, /MD(d) предпочтительней, если в солюшене есть DLL.
Здравствуйте, BlackEric, Вы писали:
C>>Это называется интерес, а где есть интерес, там будет и профессионализм
BE>Кстати, да. Зачем он там? Всегда писали, но вот зачем?
Используется чтобы избежать множественного включения одного файла. Кроме конструкции #ifndef — #endif иногда применяется нестандартная #pragma once
Здравствуйте, Ckpyt, Вы писали:
UR>> utlib::hash(CString &StrVar); C>Покажи код объявления функции. C>Первое, что приходит в голову — забыл поставить экспорт: C>#define DLL __declspec(dllexport) C>void DLL foo();
Сейчас вот так. И проект собрался бехз ошибок с передачей параметра. В чем было дело, уже не пойму