Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2008, 09:04   #1
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию Доступ к строке

В общем я не оригинален... Функция возвращает указатель на массив байт. Разыменовываю его, преобразую к необходимому типу (структура, одно из полей которой является строка PChar). Так вот в этой строке почему-то вижу всякую чушь. При этом числовые данные из этой же структуры читаются нормально. Блин, не могу понять, где я опять ошибся. Исходник и необходимые библиотеки прилагаю. Он небольшой. Интересующая меня строка выглядит так:

Form2.Edit2.Text := PServiceFailureActions(Buf)^.lpComm and;

Помогите, люди добрые...
Вложения
Тип файла: rar 2.rar (94.1 Кб, 18 просмотров)
Баламут вне форума Ответить с цитированием
Старый 16.01.2008, 13:14   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вообщем, исходник я не смог нормально открыть ( и не буду )... какой тип у lpCommand ? BufSize равен ли он TServiceFailureActions ? И почему вы используете Buf: Pointer, а не например Buf: PServiceFailureActions ? Разницы нет то ))
BOBAH13 вне форума Ответить с цитированием
Старый 16.01.2008, 14:08   #3
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

lpCommand: PAnsiChar;

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
И почему вы используете Buf: Pointer, а не например Buf: PServiceFailureActions ? Разницы нет то ))
Функция хочет в качестве параметра указатель на массив байт. Возвращаемый кусок памяти переменной длинны из-за разной длины возвращаемых строк.
Баламут вне форума Ответить с цитированием
Старый 16.01.2008, 15:41   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А ну тогда возможно, что Параметр lpCommand ServiceFailureActions получает не верный адресс куска выдленного текста, и поэтому Вы наблюдаете "казилябрики" Вообщем Вы говорите массив байт Pointer - я считаю что это вообщет никакой не массив, а число простое
BOBAH13 вне форума Ответить с цитированием
Старый 16.01.2008, 18:55   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

я тоже не смог нормально открыть твой исходник..
Баламут, ты лучше покажи объявление типа TServiceFailureActions и объявление типа массива и кусок проблемного кода.
rpy3uH вне форума Ответить с цитированием
Старый 17.01.2008, 00:09   #6
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

В архиве нету класса для компонент: RzButton и RzPanel.
Alter вне форума Ответить с цитированием
Старый 17.01.2008, 01:24   #7
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Код:
TServiceFailureActions = record
    dwResetPeriod: DWORD;
    lpRebootMsg: LPSTR;
    lpCommand: LPSTR;
    cActions: DWORD;
    lpsaActions: LPSC_ACTION;
  end;
Так эта структура объявлена в jwaWinSvc.

А вот так в MSDN:
Код:
typedef struct _SERVICE_FAILURE_ACTIONS {  
DWORD dwResetPeriod;  
LPTSTR lpRebootMsg;  
LPTSTR lpCommand;  DWORD cActions;  
SC_ACTION* lpsaActions;
} SERVICE_FAILURE_ACTIONS,  *LPSERVICE_FAILURE_ACTIONS;
Т.е. тут как бы все нормально. Значения dwResetPeriod и cActions я читаю нормально. И даже значения идущего далее массива lpsaActions тоже нормально читаются.

З.Ы. Исходник перезалил. Теперь так только стандартные компоненты. Да, и компилировал я в BDS2006 если это имеет какое-то значение.
Вложения
Тип файла: rar 2.rar (93.4 Кб, 15 просмотров)

Последний раз редактировалось rpy3uH; 17.01.2008 в 12:06.
Баламут вне форума Ответить с цитированием
Старый 20.01.2008, 11:29   #8
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Тема сползает вниз, а поблема так и не решена... Может все-таки есть идеи? Буду признателен за все.
Баламут вне форума Ответить с цитированием
Старый 20.01.2008, 15:37   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

а может там строки в юникоде?
я посмотрел объявление этой функции QueryServiceConfig2.
function QueryServiceConfig2; external advapi32 name 'QueryServiceConfig2' + AWSuffix;
наврено как раз этот суффикс является буквой W.
Чтобы точно знать что результаты являются обычными строками, то вызывай функцию QueryServiceConfig2A

Последний раз редактировалось rpy3uH; 20.01.2008 в 15:40.
rpy3uH вне форума Ответить с цитированием
Старый 21.01.2008, 00:56   #10
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Все, решил проблему... Просто нужно было довести до логического конца эксперименты с функциями ...А и ...W. Вызов-то я сделал, а вот результат правильно интерпретировать забыл...

Form2.Edit2.Text := PServiceFailureActionsW(Buf)^.lpCommand;

В одной букве было дело и кривых руках...

Последний раз редактировалось Баламут; 21.01.2008 в 01:18.
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление символа в строке Fantom Общие вопросы Delphi 2 23.06.2008 16:03
Вывод символов в строке Karl_Karlovi4 БД в Delphi 12 03.06.2008 13:31
кол-во букв в строке символов (Си) Newman Помощь студентам 1 04.12.2007 02:19
Поиск текста в строке CoDeR Общие вопросы Delphi 8 02.10.2007 01:01