Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 83
1

Чтение конфига из dll

22.02.2018, 04:35. Просмотров 443. Ответов 1
Метки нет (Все метки)


Алоха! Задача следующая: к приложению А прикручивается dll, а управление всеми функциями на себя берёт приложение в виде формы. Из формы значения 0/1 посылаются в конфиг, при этом читаются dll-кой, вследствие чего функции включаются и выключаются.
И так, в форме я уже всё необходимое реализовал: чтение конфига при запуске и запись в конфиг при изменении CheckBox-ов.
Пользовался найденным на просторах интернета кодом для работы с конфигами. Всё было замечательно. Теперь же сел работать над dll, которая должна:
а) также читать конфиг при запуске
б) читать конфиг при изменении значений в нём. К слову, в форме запись в конфиг реализована у меня так. По такому же принципу хочу сделать и чтение:
C++
1
2
3
4
5
6
    if ((mHpz->Checked && ReadResult4_1() != 0) || (!(mHpz->Checked) && ReadResult4_1 == 0))
    {
        int a; //просто так, чтобы был какой-то код
    }
    if (mHpz->Checked && ReadResult4_1() == 0)      iniWriter.WriteString("Misc", "Hpz", "1");
    if (!(mHpz->Checked) && ReadResult4_1() != 0)       iniWriter.WriteString("Misc", "Hpz", "0");
А теперь вопрос: как реализовать тоже самое в dll? Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int hpz;
int ReadResult4_1()
{
    CIniReader iniReader(".\\Logger.ini");
    int ReadResult = iniReader.ReadInteger("Misc", "Hpz", 0);
    return ReadResult;
}
void MySet()
{
    if (ReadResult4_1() != 0)
    {
        hpz= 1;
    }
}
if (hpz== 1)
{
...
}
Но, увы, при чтении значение вне зависимости от значения в конфиге будет "ноль", то есть дефолтное, указанное в iniReader.ReadInteger(). Если же дефолтом поставить 1, то сами понимаете, что всегда будет 1.
Потом сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int hpz;
int ReadResult4_1()
{
    int out;
    GetPrivateProfileString(_T("Misc"), _T("Hpz"), _T("0"), (LPSTR)out, 0, _T(".\\Logger.ini"));
    return out;
}
void MySet()
{
    if (ReadResult4_1() != 0)
    {
        hpz= 1;
    }
}
if (hpz== 1)
{
...
}
И теперь при чтении функция выводит ~16000, хотя такого и близко нет в конфиге. Проблема, кстати, не в конфиге, ибо с формой он работает отлично. А с dll - никак. Поможите, чем можите, плес :|
В завершение своего поста кину файлы для работы с конфигами:
Ini.zip
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2018, 04:35
Ответы с готовыми решениями:

Чтение из DLL
Есть DLL (не моя) в которой есть переменная(_pNetwork). Можно ли вытащить адресс этой переменной из...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

Чтение памяти процесса через загруженную в него dll
Доброе утро Подскажите решение проблемы При инжекте dll в процесс, надо чтобы эта dll прочитала...

Чтение памяти из dll
Всем привет. Нужно считать значение значение, которое лежит по адресу. Подскажите, как прочитать...

1
4 / 4 / 5
Регистрация: 22.02.2018
Сообщений: 15
22.02.2018, 20:08 2
Jodi Redlot,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#define _CRT_SECURE_NO_WARNINGS
 
#include <windows.h> 
#include <tchar.h>
#include <stdio.h> 
#include <string>
 
#define APP_NAME "IniReader"
#define INI_FILE "IniReader.ini"
 
bool CheckRegistry() { return false; }
bool SetRegistry();
bool SetString(const char * section, const char * key, const char * value);
TCHAR * GetString(const char * section, const char * key);
 
int main()
{
    if (!CheckRegistry())
        SetRegistry();
 
 
 
    return 0;
}
 
bool SetRegistry()
{
    HKEY hKey1, hKey2;
    DWORD dwDisposition;
    LONG lRetCode;
 
    std::string szData("USR:");
    szData = szData + APP_NAME + "\\Section1";
 
    std::string path("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\IniFileMapping\\");
    path = path + INI_FILE;
 
    lRetCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
        TEXT(path.c_str()),
        0,
        NULL,
        REG_OPTION_NON_VOLATILE,
        KEY_WRITE,
        NULL,
        &hKey1,
        &dwDisposition);
 
    if (lRetCode != ERROR_SUCCESS)
    {
        printf("Error in creating %s key (%d).\n", INI_FILE, lRetCode);
        return false;
    }
 
    lRetCode = RegSetValueEx(hKey1,
        TEXT("Section1"),
        0,
        REG_SZ,
        (BYTE *)szData.c_str(),
        sizeof(szData));
 
    if (lRetCode != ERROR_SUCCESS)
    {
        printf("Error in setting Section1 value\n");
 
        lRetCode = RegCloseKey(hKey1);
        if (lRetCode != ERROR_SUCCESS)
        {
            printf("Error in RegCloseKey (%d).\n", lRetCode);
            return false;
        }
    }
 
    lRetCode = RegCreateKeyEx(HKEY_CURRENT_USER,
        TEXT(APP_NAME),
        0,
        NULL,
        REG_OPTION_NON_VOLATILE,
        KEY_WRITE,
        NULL,
        &hKey2,
        &dwDisposition);
 
    if (lRetCode != ERROR_SUCCESS)
    {
        printf("Error in creating %s key (%d).\n", APP_NAME, lRetCode);
 
        lRetCode = RegCloseKey(hKey2);
        if (lRetCode != ERROR_SUCCESS)
        {
            printf("Error in RegCloseKey (%d).\n", lRetCode);
            return false;
        }
    }
 
    WritePrivateProfileStringW(NULL, NULL, NULL, (LPCWSTR)INI_FILE);
 
    lRetCode = RegCloseKey(hKey1);
    if (lRetCode != ERROR_SUCCESS)
    {
        printf("Error in RegCloseKey (%d).\n", lRetCode);
        return false;
    }
 
    lRetCode = RegCloseKey(hKey2);
    if (lRetCode != ERROR_SUCCESS)
    {
        printf("Error in RegCloseKey (%d).\n", lRetCode);
        return false;
    }
 
    return true;
}
 
bool SetString(const char * section, const char * key, const char * value)
{
    return WritePrivateProfileString(TEXT(section), TEXT(key), TEXT(value), TEXT(INI_FILE));
}
 
TCHAR * GetString(const char * section, const char * key)
{
    TCHAR  * inBuf = new TCHAR[80];
 
    GetPrivateProfileString(section, key, TEXT("Error: GPPS failed"), inBuf, 80, TEXT(INI_FILE));
 
    return inBuf;
}
Попробуйте на основе этого сделать

Добавлено через 4 минуты
Запускать от админа
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2018, 20:08

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

При чтении dll библиотеки в обычном(не бинарном) виде, чтение прерывается на NULL
Задача такая: открыть dll файл(не мой) в обычном текстовом виде(каким его могут открыть обычные...

Чтение из конфига
Есть файл app.config . Внес туда строки. &lt;appSettings&gt; &lt;add key=&quot;default.kaf.value&quot;...

DLL Чтение\запись
Знаю что тут много тем про работу и написание DLL но увы помогите! 1. Как из DLL читать значение...

Чтение из стороннего процесса из dll
Есть ли другие способы читать память стороннего приложения, помимо readprocessmemory, через свою...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.