MFC SetRegistryKey ... Есть ли функция GetRegistryKey?

У меня есть эти две строчки кода.

CString strHost = AfxGetApp()->GetProfileString(_T("WebServices"), _T("Server"));
AfxMessageBox(strHost);

Я нигде в приложении не устанавливаю значение. (это делает установщик). Таким образом, strHost должен быть одинаковым независимо от того, где и когда запускается эта строка.

Вот что у меня есть. Нажмите A -> запустить функцию, содержащую код -> увидеть ожидаемые данные; Нажмите B -> выполните обратные вызовы Windows -> запустите функцию, содержащую код -> см. "";

Я бы подумал, что что-то в B очищает значение, но если я сначала нажму B, а затем A, A выдаст то, что я хочу, а не "".

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

Что меня любопытно, так это то, что GetProfileString извлекает данные откуда-то, чего не должно быть? Это единственное, о чем я могу думать.

Вопросов.
1.) Есть ли способ подтвердить, что я все еще работаю с тем же "ключом"?
2.) Кто-нибудь сталкивался с этим раньше?

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


Хотя я не нашел полного ответа, я нашел кое-что интересное. Я использую AfxGetApp () -> GetProfileString ..
Кажется, функция AfxGetApp () возвращает разные вещи в разное время .. Я не уверен, как это могло произойти, но, по крайней мере, теперь я могу это объяснить.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 921
2

Ответы 2

GetProfileString () может также читать из файла .ini, помимо реестра. Если вызов GetProfileString () выполняется для объекта, производного от CWinApp, отличного от объекта в основном приложении (например, в dll), он может попытаться прочитать из файла .ini приложения. Попробуйте войти в GetProfileString (), чтобы узнать, что происходит.

Однако мой совет: не используйте GetProfileString (). Используйте CRegKey для прямого запроса реестра. Вероятно, это не то, что вы хотите услышать, потому что очень важно передавать ключ реестра. Обычно я # определяю глобальный макрос APPLICATION_REG_KEY в stdafx.h. Пуристов это расстраивает, но очень удобно.

Это то, что я думал, что мне, возможно, придется сделать. Проблема в том, что приложение запуталось. (Я унаследовал это от парня, которого уволили), и строка профиля get and set используется повсюду. Я бы хотел заменить его везде, и это означало бы полный регрессионный тест ... Фу ... Но спасибо.

baash05 19.12.2008 18:13

К сожалению, я не могу войти в код. Это приложение PPC, и проблема возникает только на одном типе устройства, когда пользователь проводит кредитную карту. Я думаю, что ты прав. Проблема в том, как это исправить.

baash05 19.12.2008 18:31

Да ладно, в таком случае я сочувствую тебе, потому что не вижу другого выхода. Возможно, попробуйте с помощью такого инструмента, как RegMon, чтобы узнать, осуществляется ли какой-либо доступ к реестру в вашем сценарии Press B. Не уверен, насколько это возможно в вашей среде.

Roel 19.12.2008 18:35

это не так .. Но я думаю, что ваше представление о DLL влияет, может выдержать критику ... Я помещаю блоки afxmessage в dll, чтобы посмотреть, что может происходить.

baash05 19.12.2008 19:16

Я нашел ответ .. Вроде. Функция AfxGetApp возвращает разные объекты в зависимости от того, где она вызывается. Если она вызывается, например, в dll, она возвращает указатель на нее. Я думаю, что он даже возвращает не то, что приложение использует вызовы ОС. Это означает, что GetProfileString предназначена для другого «профиля».

Я не нашел никого, кто сталкивался с этим, но считаю, что проблема решена. Не стесняйтесь добавлять больше «ответов», если вы этого не сделаете ..

У меня был аналогичный случай с AfxGetApp в DLL. Я обнаружил, что в этом случае методы Get / Set работают с файлом .ini в c: \ windows, сформированном из имени DLL.

ggurov 12.10.2012 11:01

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