Кибор » Кибор - Интегрированная среда разработки ботов » Предложения по программе » INI

Страниц (4): « 1 [2] 3 4 »
 

11. idcco - 27 Марта, 2017 - 07:56:41 - перейти к сообщению
Точно! Спасибо!! =)
CODE:
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
return format (#str[0]);
}
string name = iniread ("Name");
messagebox (name);
12. 007wan - 11 Июля, 2017 - 06:04:35 - перейти к сообщению
 idcco пишет:
В общем сложности... Все прекрасно работает если не пихать в функцию. Щас поясню...
Есть файл config.ini на диске C:\ (С:\config.ini) со следующим листингом:
CODE:
[Default]
Name=Bot

Если использовать такой код:
CODE:
char str[255];
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString ("Default", "Name", 0, address (#str[0]), 255, "C:\config.ini");
string name = format (#str[0]);
messagebox (name);

то в переменной name получается верное значение - "Bot". Оно и выводится сообщением messagebox.



Но если запихнуть все это в функцию и вызвать ее:
CODE:
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
return (format (#str[0]));
}
string name = iniread ("Name");
messagebox (name);

то в результате name имеет пустое знеачение. Где я ошибся?
(Добавление)
Блин я как всегда!
Надо выводить return'ом переменную. Отбой паники! Простите, был напуган =D
Вот верный код:
CODE:
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
string str_return = format (#str[0]);
return str_return;
}
string name = iniread ("Name");
messagebox (name);




А что дает этот код?
13. Zireael - 12 Ноября, 2017 - 13:50:25 - перейти к сообщению
Как получить значение понятно. Можно пример как записать значение?
14. Kibor - 13 Ноября, 2017 - 04:58:34 - перейти к сообщению
 Zireael пишет:
Как получить значение понятно. Можно пример как записать значение?

Так же само, только используя
WritePrivateProfileString

external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
15. Zireael - 13 Ноября, 2017 - 05:54:47 - перейти к сообщению
Спасибо. Теперь понятно.
CODE:
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");
16. 007wan - 13 Ноября, 2017 - 07:48:01 - перейти к сообщению
 Zireael пишет:
Спасибо. Теперь понятно.
CODE:
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");

Всё это херня полная, можно через фопен или даже изменить типа файла на текстовый и тоже сделать через фопен
17. Kibor - 13 Ноября, 2017 - 08:41:30 - перейти к сообщению
Если надо сохранять настройки именно для Кибор, то такой код позволяет сохранять введенные настройки и при следующем запуске их считывать.

CODE:
int n1;
int n2;

n1=formatsn(getcontrol(EDIT_0));
n2=formatsn(getcontrol(EDIT_1));

if (fopen ("C:\config.txt", "w")!=0)
{
fwrite(n1);fwrite (ENDL);
fwrite(n2);
fclose();
}

/////////////////////////////////

messagebox (n1);
messagebox (n2);




INITDIALOG
{
if (fopen ("C:\config.txt", "r")!=0)
{
fread(n1);
fread(n2);
fclose();

sendcontrol(EDIT_0, format(n1));
sendcontrol(EDIT_1, format(n2));
}
}


CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_0 "Настройка первая" 10 10 120 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "5" 115 8 110 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "Настройка вторая" 10 30 120 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_1 "25" 115 28 110 18 //ПозицияX ПозицияY РазмерX РазмерY
}
18. 007wan - 14 Ноября, 2017 - 08:13:04 - перейти к сообщению
 007wan пишет:
 Zireael пишет:
Спасибо. Теперь понятно.
CODE:
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");

Всё это херня полная, можно через фопен или даже изменить типа файла на текстовый и тоже сделать через фопен

Я не про то, а про это...
19. grBIN - 01 Марта, 2019 - 19:53:03 - перейти к сообщению
Парни то ли я уже засыпаю и не соображаю, то ли багуля какая-то, подскажет кто?
CODE:

external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
int wind_num = 1;


//Работает - TEST 1=1
//WritePrivateProfileString ("TEST", format(wind_num), "1", "C:\config.ini");

//Ошибка - "format1" - вместо 1
//WritePrivateProfileString ("TEST", format(wind_num), format(wind_num), "C:\config.ini");

//Ошибка - вылетает кибор, без сообщения об ошибке, в ini запись не идет.
//WritePrivateProfileString ("TEST", format(wind_num), wind_num, "C:\config.ini");


//По идее, 1 и 2 вариант - должны точно работать нормально. С 3 хз даже.
20. grBIN - 02 Марта, 2019 - 10:08:49 - перейти к сообщению
Решил проблему временным костылем.
добавил дополнительную строковую переменную
CODE:

external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
int wind_num = 150;
string test = format(wind_num);

//Работает - TEST 1=1
//WritePrivateProfileString ("TEST", format(wind_num), "1", "C:\config.ini");

//Ошибка - "format1" - вместо 1
//WritePrivateProfileString ("TEST", format(wind_num), format(wind_num), "C:\config.ini");

//Костыль вроде работает.
//WritePrivateProfileString ("TEST", format(wind_num), test, "C:\config.ini");


Powered by ExBB FM 1.0 Final