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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 10:41   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
Вопрос TResourceStream. Выдергивание моей строки.

Доброго времени суток!

Создал ресурс *.rc:
Код:
STRINGTABLE
LANGUAGE 0, 0
{
7, "FileURL=http://localhost/file.exe"
}
Компилирую в проект. Нужно в проекте выдернуть эту строку. Как?

Пробовал так:
Код:
var
  cFill: string;
  RS: TResourceStream;
  SS: TStringStream;
  s: string;
begin
  cFill := 'FileURL=';
  RS := TResourceStream.Create(HInstance, '7', RT_STRING);
  SS := TStringStream.Create;
  try
    SS.LoadFromStream(RS);
    s:=ss.DataString;
  finally
    FreeAndNil(SS);
    FreeAndNil(RS);
  end;
end;
Пишет, что ресурс с id 7 не существует

Как правильно строки вытаскивать?
Человек_Борща вне форума Ответить с цитированием
Старый 30.03.2012, 11:09   #2
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

а его реально может не существовать,ты сматрел че у тебя в ресе получается?
кроме того id должен быть цифрой а не строкой
кури вот это

if LoadString(hInstance, 7, буфер, длинна) <> 0 then
robt вне форума Ответить с цитированием
Старый 30.03.2012, 12:48   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Ресурс линкуется и виден в exe.


вот пытаюсь достать..
Код:
const
  BuffSize = 511; //0+511
var
  cFill: string;
  s: string;
  Buff:array[0..BuffSize] of PChar;
  pBuff:Pointer;
begin
  pBuff:=@Buff;
  cFill := 'FileURL=';
  if LoadString(HInstance, 7, pBuff, BuffSize) <> 0 then
  begin
    s := string(pBuff^);
    Result:=s;
  end;
end;
Ну и вылетаю в AV.

2 варианта:
1. я что-то не так делаю
2. я намудрил с буфером и его длинной.

Последний раз редактировалось Человек_Борща; 30.03.2012 в 12:59.
Человек_Борща вне форума Ответить с цитированием
Старый 30.03.2012, 12:54   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
this parameter can be MAKEINTRESOURCE(ID), where ID is the integer identifier of the resource.
Цитата:
а его реально может не существовать,ты сматрел че у тебя в ресе получается?
в честь чего не должно существовать то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 30.03.2012 в 12:57.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.03.2012, 13:01   #5
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в честь чего не должно существовать то?
бывает

Код:
const
  BuffSize = 511; //0+511
var
  cFill: string;
  Buff:array[0..BuffSize] of Char;
begin
  cFill := 'FileURL=';
  if LoadString(HInstance, 7, @Buff, BuffSize) <> 0 then  Result:=Buff;
end;
robt вне форума Ответить с цитированием
Старый 30.03.2012, 13:05   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
RS := TResourceStream.Create(HInstance, '7', RT_STRING);
Здесь ты не ресурс с номером 7 грузишь, а ресурс с именем 7.

Надо:
Цитата:
RS := TResourceStream.Create(HInstance, MakeIntResource(7), RT_STRING);
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 30.03.2012, 13:20   #7
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

куда катится мир...
изза какойта позорной строчки в ресурсах,народ городит огороды с потоками и классами
robt вне форума Ответить с цитированием
Старый 30.03.2012, 13:26   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
куда катится мир...
изза какойта позорной строчки в ресурсах,народ городит огороды с потоками и классами
порою проще работать с потоком ресурсным, чем с функциями АПИ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.03.2012, 13:34   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

И правильно делают.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 30.03.2012, 20:41   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Гм..
Код:
implementation

function GetSCClientStr: string;
var
  cFill: string;
  RS: TResourceStream;
  SS: TStringStream;
  s: string;
begin
  cFill := 'FileURL=';
  RS := TResourceStream.Create(HInstance, MakeIntResource(7), RT_STRING); //Ухожу в AV
  SS := TStringStream.Create;
  try
    SS.LoadFromStream(RS);
    s:=ss.DataString;
  finally
    FreeAndNil(SS);
    FreeAndNil(RS);
  end;
end;

initialization
  vSCClientURL:=GetSCClientStr;
Выкидивает пендалями в ошибку. И вроде правильно все, но и ошибку выбивает. ресурс точно существует.
vSCClientURL - глобальная переменная.


Далее

Цитата:
const
BuffSize = 511; //0+511
var
cFill: string;
Buff:array[0..BuffSize] of Char;
begin
cFill := 'FileURL=';
if LoadString(HInstance, 7, @Buff, BuffSize) <> 0 then Result:=Buff;
end;
Странно, но это работает....

Последний раз редактировалось Человек_Борща; 30.03.2012 в 20:44.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SysListView32 выдергивание текста StartMis Общие вопросы Delphi 5 16.11.2011 22:59
Постоянное выдергивание из базы CodeNOT JavaScript, Ajax 0 01.07.2011 14:20
Случайное выдергивание из базы CodeNOT PHP 1 30.05.2011 11:56
Выдергивание слов из STRING kardinal94 Общие вопросы Delphi 1 30.07.2010 22:21