Форум программистов, компьютерный форум, киберфорум
Наши страницы

dll - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблоны и параметр по умолчанию http://www.cyberforum.ru/cpp-beginners/thread929600.html
Добрый день. Вроде всё делаю по учебнику, но компилятор не пропускает: #include <iostream> #include <vector> #include <cstdlib> template<class T> bool DefaultComparand(const T &, const T &); ...
C++ Указатель вне корректного диапазона void f(T a) { T v; T p* = &v; p--; *p = a; // тут p вне корректного диапазона, почему? } объясните этот момент плиз, я так понял, что когда мы дикрементируем указатель (p--), то т.к.... http://www.cyberforum.ru/cpp-beginners/thread929584.html
C++ Погрешность вычислений
Читаю книгу Дейтелов "Как программировать на С++", попалась следующая задача, где нужно вводить кол-во бензина, пройденный путь, исходя из этих данных вычислять миль/галлон и вычислить средний расход...
C++ Битовые операции
Здраствуйте, помогите, пожалуйста! Надо написать три функции, используя только битовые (для первых двух) и только битовые и арифметические операции (для третей), которые: 1) Функция, которая...
C++ Виртуальные базовые классы: какие требования предъявляются к иерархии наследования? http://www.cyberforum.ru/cpp-beginners/thread929534.html
класс на вершине иерархии определяет конструктор с параметрами. какие требования предъявляются к иерархии наследования?? попитался реализовать... // Using virtual base classes. #include...
C++ Какие требования нужно выполнить, чтобы стать Junior developer, Middle и Senior developer? Быть может не совсем в ту ветку форума написал, но мне показалось, что здесь я смогу получить квалифицированный ответ с большей вероятностью! Если что, уж извини админ! Пока только учусь в... подробнее

Показать сообщение отдельно
Убежденный
Ушел с форума
Эксперт С++
15701 / 7211 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
28.07.2013, 23:12
Mr. Hat, можно брать пример с Win32 API:

1) Функции и переменные должны экспортироваться только с помощью DEF-файла.
При использовании DEF-файла экспортируемые символы не декорируются, то есть, функция
DoSomething будет записана в секцию экспорта, как DoSomething, а не _DoSomething@8 или
??8CDoSomething@DAEE@F0GDE@8. Соответственно, ее смогут найти и вызвать практически
любые компиляторы - С/C++, Delphi, .NET, VBA и т.д.

2) Должны использоваться только совместимые соглашения о вызовах (calling convention).
Лучше всего - stdcall. Это наиболее стандартное соглашение.

3) Должны использоваться типы фиксированных и четко определенных размеров.
Например, в C++ bool занимает 1 байт, есть также BOOL в 4 байта и BOOLEAN в 1 байта, а
еще тип VARIANT_BOOL размером в 2 байта, в котором "истине" соответствует 0xFFFF.
В VC++ wchar_t равен 2 байтам, в MinGW - 4. И так далее.

4) Должны использоваться единые настройки выравнивания (#pragma pack).

5) Память под объект должна освобождаться в том же модуле (exe/dll), в котором была выделена.
Выделить память под объект в exe, а затем освободить ее в dll - ошибка. Тут дело даже не в
том, что используются разные среды или компиляторы, - подобную ошибку можно легко получить в
пределах одной версии компилятора, - а в том, что обычно у каждого модуля своя копия аллокатора
(для malloc/free) и одни аллокаторы "не знают" о блоках памяти, выделенных другими.
То есть, когда вы в exe освобождаете память, выделенную в dll, то exe-аллокатор не найдет
информации о данном блоке в своих таблицах, в результате чего произойдет ошибка.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru