idcco |
Отправлено: 27 Марта, 2017 - 15:56:41
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2017
Репутация: 5
|
Точно! Спасибо!! =)
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); |
|
|
007wan |
Отправлено: 11 Июля, 2017 - 14:04:35
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
idcco пишет: В общем сложности... Все прекрасно работает если не пихать в функцию. Щас поясню...
Есть файл config.ini на диске C:\ ( С:\config.ini) со следующим листингом:
Если использовать такой код:
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);
А что дает этот код? |
|
|
007wan |
Отправлено: 13 Ноября, 2017 - 15:48:01
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Спасибо. Теперь понятно.
CODE:external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");
Всё это херня полная, можно через фопен или даже изменить типа файла на текстовый и тоже сделать через фопен |
|
|
007wan |
Отправлено: 14 Ноября, 2017 - 16:13:04
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
007wan пишет: Zireael пишет: Спасибо. Теперь понятно.
CODE:external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");
Всё это херня полная, можно через фопен или даже изменить типа файла на текстовый и тоже сделать через фопен
Я не про то, а про это... |
|
|
grBIN |
Отправлено: 02 Марта, 2019 - 03:53:03
|
Наблюдатель
Покинул форум
Сообщений всего: 41
Дата рег-ции: Нояб. 2017
Откуда: Псков
Репутация: 2
|
Парни то ли я уже засыпаю и не соображаю, то ли багуля какая-то, подскажет кто?
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 хз даже.
|
|
|
grBIN |
Отправлено: 02 Марта, 2019 - 18:08:49
|
Наблюдатель
Покинул форум
Сообщений всего: 41
Дата рег-ции: Нояб. 2017
Откуда: Псков
Репутация: 2
|
Решил проблему временным костылем.
добавил дополнительную строковую переменную
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");
|
|
|
|