MFC SetRegistryKey ... Есть ли функция GetRegistryKey? - PullRequest
1 голос
/ 19 декабря 2008

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

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 () возвращает разные вещи в разное время ... Я не уверен, как это могло произойти, но, по крайней мере, теперь я могу объяснить это ,

Ответы [ 2 ]

1 голос
/ 19 декабря 2008

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

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

0 голосов
/ 28 декабря 2008

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

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

...