Форум программистов, компьютерный форум CyberForum.ru

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

Показать сообщение отдельно
Убежденный
Системный программист
 Аватар для Убежденный
14214 / 6229 / 988
Регистрация: 02.05.2013
Сообщений: 10,390
Завершенные тесты: 1
28.07.2013, 23:12     dll
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-аллокатор не найдет
информации о данном блоке в своих таблицах, в результате чего произойдет ошибка.
 
Текущее время: 11:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru