Ответы с форумов MSDN

Сборка библиотеки SOFA для Windows

Date: 10.04.2021 13:31:29

Особой разницы нет, собирать DLL из одного файла или нескольких. Если файлов несколько, просто добавьте в проект несколько файлов, остальные шаги будут теми же. 

Впрочем, по опыту предыдущей похожей темы (https://social.msdn.microsoft.com/Forums/ru-RU/a24a7b4c-0e44-41db-939b-60c31327a1e5/10571086107310891090107410771085108510721103-dll?forum=fordesktopru) могу сказать, что идея взять некий большой набор исходников на С/С++ и собрать его Visual C++ имеет высокие шансы закончиться ничем. Если проект рассчитан на другую систему сборки, например GCC+Make или использует что-то, неподдерживаемое в Visual C++, он просто не соберется. И даже если он соберется, не факт, что это проект DLL, т.е. он может ничего не экспортировать через decslpec(dllexport). Тут все же надо начинать с руководства от разработчиков библиотеки, что с ней нужно делать.

Message 46

Date: 12.04.2021 6:06:16

ANSI C и С++ интегрируются вполне нормально, но в объявлениях иногда может понадобиться добавить extern "C", либо указать компилятору, что С нужно собирать как С++. Допустим, у нас есть файл test.c (расширение .с по умолчанию собирается как С)

int CalcSum(int x, int y) {
	return x + y;
}

Тогда в файле main.cpp мы можем вызвать функцию так:

extern "C" int CalcSum(int x, int y);

void main()
{
	int res = CalcSum(1, 2);
}
Либо в свойствах проекта "С++ - Дополнительно - Компилировать как" выбрать С++. Тогда не надо будет прописывать  extern "C", но могут вылезти какие-то другие проблемы, учитывая что С и С++ это все же разные языки.


Message 45

Date: 12.04.2021 6:11:16

"Попробовал построение и DLL"

Вы выполнили все пункты из руководства? В частности:

1. Убедились что в нужных местах функции помечены _declspec(dllexport) или _declspec(dllimport)

2. Подключили .lib файл с разделом экспорта библиотеки к проекту, который использует dll (https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=msvc-160#to-add-the-dll-import-library-to-your-project)

Message 44

Date: 12.04.2021 17:27:48

_declspec(dllexport) должно быть прописано у всех функций, которые экспортируются из dll. Альтернативным способом является .def файл. Если у вас нет ни того ни другого, идею сборки DLL придется отбросить, проект не предназначен для этого. 

"dll строится без сбоев."

Видимо, потому что компилятор не проверяет наличие атрибута экспорта на хотя бы одной функции. Но если строится это уже хорошо, значит код совместим с Visual C++

Message 43

Date: 13.04.2021 3:50:34

SOFA это http://www.iausofa.org/ ? Глянул, там есть makefile для сборки статической библиотеки под Unix, для Windows и Visual C++ стандартно ничего не предоставляется. Есть какие-то неофициальные решения, попробуйте по запросу "sofa library build for windows" в поисковике. 

"Хорошо бы почитать что-нибудь с нуля..."

У вас же в первом сообщении есть ссылка не документацию. Перейдите там в корневой раздел и читайте. Только лучше английскую версию, пусть со словарем, так как официальный русский перевод по большей части никуда не годится.

Message 42

Date: 14.04.2021 6:56:34

См. выше, либо помечаете нужные функции __declspec(dllexport), либо добавляете .def файл со списком экспортируемых функций. Если вам нужно только несколько функций, ни то, ни другое не будет очень трудным.

Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub