С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035

Проблема с доступом к Poco::Dynamic::Var из dll

04.08.2022, 16:01. Показов 2036. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется длл-ка.
В ней объявлена структура:


C++
1
2
3
4
5
6
7
struct__declspec(dll{export|import}) Config
    {
        std::string  PortName;
        Poco::Dynamic::Var SlaveAddress;
        UInt64 RequestTimeout;
        UInt8    RequestAttempts;
    };

Poco:ynamic::Var SlaveAddress - это переменная "динамического типа".

когда работаешь с этой переменной внутри этой самой длл-ки, никаких проблем не возникает.
или когда из неё читаешь некие значения вне этой длл-ки, т.е. в прикладной программе.

проблемы возникают, когда пытаешься в прикладной программе в ней что-либо записать.


к примеру, вот так.



такое впечатление, что это связано то ли с разными то ли областями памяти, то ли с правами доступа причём в обе стороны
Миниатюры
Проблема с доступом к Poco::Dynamic::Var из dll  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2022, 16:01
Ответы с готовыми решениями:

Проблема с Dll и рефлексией (dynamic)
Здравствуйте, товарищи ситуация такова: делаю домашку. задача следующая: подгрузить динамически dll с самописным классом комплексных...

Чем отличаются var и dynamic?
Чем отличаются Var и dynamic? И там и там вроде бы компилятор сам определяет, к какому типу отнести переменную.

Какая разница между ключевыми словами var и dynamic
Какая разница между ключевыми словами var и dynamic? Ведут себя одинаков. В чем разница между ними?

2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.08.2022, 18:04
Лучший ответ Сообщение было отмечено Khludenkov как решение

Решение

Цитата Сообщение от Khludenkov Посмотреть сообщение
такое впечатление, что это связано
с различными версиями рантайм-с++,
которые используют приложение и dll


пример:

C++
1
2
3
// dll.hpp
#include <iostream>
void changeName(std::string& v);
приложение создает объект std::string,
и передает его в качестве аргумента API функции dll,
внутри которой осуществляется модификация объекта.

однако, dll была собрана одним компилятором,
а приложение - с другим.

у этих двух сборок могут быть различные реализации менеджеров памяти.
могут быть различные версии стандартной библиотеки,
могут быть различные версии std::string.

поэтому, переданный в dll объект может запросто оказаться несовместимым с ожидаемой версией,
со всеми вытекающими последствиями.

поэтому, практика использования dll-api гласит:
прикладное приложение может запрашивать у dll ресурсы и использовать их для работы.
но оно ни в коем случае не должно самостоятельно создавать их,
или пытаться разрушить, или модифицировать в обход api dll

кейс примерно такой:

C++
1
2
3
4
5
auto* resource = dll::getResource();  // <--- запросили
 
dll::useResource(resource);  // <--- поработали с ресурсом
 
dll::freeResource(resource);  // <--- попросили dll освободить ресурс
Цитата Сообщение от Khludenkov Посмотреть сообщение
когда пытаешься в прикладной программе в ней что-либо записать
прикладная программа не должна самостоятельно что-то записывать.
вместо этого она просит dll осуществить эту запись
2
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
04.08.2022, 19:39  [ТС]
hoggy, спасибо.
там внутри падает в

C++
1
2
3
4
5
6
7
8
9
10
11
    VarHolder* content() const
    {
        return _pHolder;
    }
 
    void destruct()
    {
        if (!isEmpty()) delete content();
    }
 
    VarHolder* _pHolder;
вот здесь:
if (!isEmpty()) delete content();


а инициализация проходит так:

C++
1
2
        Var tmp(other);
        swap(tmp);
Добавлено через 57 минут
hoggy, заработало! Большое спасибо.
сделал так в длл-ке:

C++
1
2
3
4
5
6
7
8
9
10
    ProtocolConfig ProtocolConfigFactory::getProtocolConfig()
    {
        ProtocolConfig pc;
        return pc;
    }
    ProtocolConfig ProtocolConfigFactory::getProtocolConfig(ProtocolConfig pc)
    {
        ProtocolConfig pc2(pc);
        return pc2;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2022, 19:39
Помогаю со студенческими работами здесь

Подключение Poco Dll
Начал пользоваться замечательной библиотекой Poco но никак на могу подключить dll-ку точнее хедер файл Конкретнее SerialPort.dll...

Как сцепить строки? Например <? $var='Ура!'; $var=$var+' Еще раз...'; echo $var; ?>
Вот пример: &lt;? $var='Ура!'; $var=$var+' Еще раз...'; echo $var; ?&gt; Выводит Ура!0

Как проще всего - внедрить .DLL, в приложение (с последующем доступом к .dll)
Подскажите - как можно проще, добавить модуль .dll, внутрь .exe, т.е чтобы после компиляции модуль находился внутри приложения, с...

Скрипты перестали различать $_POST['var'], $_SESSION['var'] и просто $var
После переезда на новый хостинг с php 5.2 на php 5.3 обнаружил глюк. Почему то скрипты перестали различать $_POST, $_SESSION и просто...

Dynamic Link Library (.dll)
Необходимо создать программу с использованием динамической библиотеки. А именно: создать подпрограммы обработки множеств: объединение,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru