Ссылочная структура не "прилипает"

В настоящее время я переношу большой объем кода из приложения на основе MFC в библиотеку DLL для целей брендинга клиента.

Я столкнулся с необычной проблемой. Этот фрагмент кода одинаков в обеих системах:

// ...
    CCommsProperties props;

    pController->GetProperties( props );
    if (props.handshake != HANDSHAKE_RTS_CTS) 
    {
        props.handshake = HANDSHAKE_RTS_CTS;
        pController->RefreshCommProperties( props );
    }

// ... in another file: 
void CControllerSI::RefreshCommProperties ( const CCommsProperties& props )
{
    // ... code ...
}

CommProperties - это оболочка для настроек связи, сериализации и т. д., А pController относится к типу ControllerSI, который сам по себе является слоем между фактическими коммуникациями и приложением.

В исходной версии MFC настройка квитирования для RTS-CTS Sticks, но при запуске в качестве версии DLL он сбрасывается на 0, как только функция вводится. Код полностью содержится в разделе кода DLL, поэтому нет никаких границ.

Основные различия между исходным и новым модулями заключаются в том, что переменные, вызывающие различные диалоги, были удалены, а #includes удалены.

Я потерял из-за этого целый день и больше не хочу проигрывать ...

Почему этот вопрос был закрыт как "не по теме" ??

augustin 09.12.2010 06:50

Изначально я закрыл, но не помню, чтобы закрыл его как не по теме. Возможно, это было до того, как они детализировали код закрытия и для всех ранее закрытых вопросов было установлено значение по умолчанию «не по теме».

graham.reeds 09.12.2010 16:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
124
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Трудно увидеть, что не так, только из данного кода. Некоторые общие указатели:

  1. Объект инициализируется и обрабатывается в разных бинарных модулях с несовместимой компоновкой (например, время выполнения C)

  2. Если класс / структура являются общими, они не экспортируются / импортируются правильно.

  3. Класс (ы) определены более чем в одном месте, и вы не включаете правильные определения.

Вышеупомянутые три являются наиболее вероятными причинами, особенно если для всех полей установлены исходные значения по умолчанию.

если это происходит только с одним или двумя полями, структура может быть плохо выровнена, и вам может потребоваться переупорядочить поля, чтобы исправить это (проверьте это и в выпуске).

В общем, я склонен предположить, что объект, который вы инициализировали, не тот, который видит RefreshCommProperties(), по какой-то причине может быть одним из трех вышеупомянутых.

Чтобы действительно понять, что происходит, вам, вероятно, нужно опубликовать исходный код - или, по крайней мере, столько же, чтобы воспроизвести проблему. К сожалению, StackOverflow, похоже, не поощряет это. Вы можете разместить свой код на FTP-сайте или перейти на сайт, позволяющий размещать исходный код (например, CodeGuru).

В UserVoice был пункт о вложениях, но он был отклонен.

graham.reeds 02.10.2008 18:12

Возможно, что CCommsProperties определены в двух разных местах, и каждый файл включает свою собственную версию.

Чтобы проверить эту теорию, в отладчике нужно посмотреть & props.handshake. Если отладчик сообщает вам, что поле имеет разные адреса внутри и вне функции, тогда гипотеза верна, и вы можете перейти к исследованию выходных данных препроцессора, чтобы выяснить, почему это происходит.

Ответ принят как подходящий

После публикации Saratv я решил отказаться от того, что сделал, и снова перезапустить его из рабочего источника.

На этот раз, однако, это работает ... Думаю, я никогда не узнаю, почему передача структуры заставила ее измениться.

Другие вопросы по теме