Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как DLL правильно заполнить строковыми ресурсами, и потом достать [D7, XP]


Страницы:   1 2

St74 ©   (2006-01-13 20:40:00) 

Привет Многоуважаемые Гуру!

Вопрос про Dll со Строковыми ресурсами!

Делаю так...
...............
Делаешь текстовый файл с ресурсами, типа

--my.rc--
STRINGTABLE
{
00001, "My String #1"
00002, "My String #2"
}

Далее компилируешь его:
brcc32 my.rc
У тебя получится my.res.
Делаешь DLL:

--my.dpr--

library my;

{$R my.res}

begin

end.

Компилируешь Дельфиским компилятором:

dcc32 my.dpr
Получаешь, наконец-то свою my.dll

Теперь о том, как использовать.

В своей программе:

var
 h: THandle;
 S: array [0..255] of Char;
begin
 h := LoadLibrary('MY.DLL');
 if h <= 0 then  
   ShowMessage('Bad Dll Load')
 else
 begin
    SetLength(S, 512);// Место ошибки!!!
   LoadString(h, 1, @S, 255);
   FreeLibrary(h);
 end;
end;
.............................

Выдаёт ошибку ... Constant object cannot be passed as var parameter
Что не так?


Mc.Tarik   (2006-01-15 22:04:00) [1]

Удалено модератором


isasa   (2006-01-14 11:00:00) [2]

:) Ничем. Что передавать, как

lpBuffer  - [out] Pointer to the buffer to receive the string.

личное дело каждого.


St74   (2006-01-14 10:51:00) [3]


> St74   (14.01.06 10:48) [27]


Сорри! за правописание, я тоже ещё не проснулся!


St74   (2006-01-14 10:48:00) [4]

Парни!

А в my.rc что значит это знак ( #)

--my.rc--
STRINGTABLE
{
00001, "My String #1"
00002, "My String #2"
}

Эсли смитреть на другой ресурс Ресторатором то (#) невидно или нет!


begin...end   (2006-01-14 10:41:00) [5]

> isasa ©   (14.01.06 10:37) [25]

Ну, если нравится писать @S[0] вместо S -- пожалуйста, я не против.

Только чем [3] существенно отличается от [0] (с учётом [1]), я так и не понял.


isasa   (2006-01-14 10:37:00) [6]

:) Виноват, не проснулся.
S[0]  ->  @S[0],
S[1]  ->  @S[1],


begin...end   (2006-01-14 10:18:00) [7]

> isasa ©   (14.01.06 09:40) [23]

> S: array [0..MaxBuffLen] of Char;
> LoadString(h, 1, S[0], MaxBuffLen);

Извините, а Вы сами это хотя бы скомпилировать пробовали?

> S: string;
> i:=LoadString(h, 1, S[1], MaxBuffLen);

Извините, а Вы сами это хотя бы скомпилировать пробовали?


isasa   (2006-01-14 09:40:00) [8]

Сорри за паузу. Дети выгнали с компа.
Ошибся, не увидел индексацию с 0.
Варианта 2

var
S: array [0..MaxBuffLen] of Char;
...
  LoadString(h, 1, S[0], MaxBuffLen);
...
или

var
S: string;
i: integer;
...
  SetLength(S, MaxBuffLen);    // Тогда это надо.
  i:=LoadString(h, 1, S[1], MaxBuffLen);
  SetLength(S, i);
...
:) Все-таки передаем ссылку на первый элемент структуры


begin...end   (2006-01-14 08:55:00) [9]

> isasa ©   (13.01.06 22:19) [13]

> :)

Что именно улыбнуло?

> S[1] - !?

Что Вы хотели этим сказать? Вас интересует, что такое S[1]? Это второй по счёту символ буфера из [0].

> isasa ©   (13.01.06 22:21) [14]

> Да, а
> @S -> Addr(S)

Что Вы имели в виду, я опять не понял. Поясните, пожалуйста.


Anatoly Podgoretsky   (2006-01-13 23:03:00) [10]

Return Values

If the function succeeds, the return value is the number of bytes (ANSI version) or characters (Unicode version) copied into the buffer, not including the null-terminating character, or zero if the string resource does not exist. To get extended error information, call GetLastError.


isasa   (2006-01-13 22:58:00) [11]

LoadString - это функция. Она возвращает результат.
i:=LoadString(...);
в iколичество символов, помещенных в буфер. :)


Reindeer Moss Eater   (2006-01-13 22:41:00) [12]

LoadString - это функция. Она возвращает результат.
Тебе возвращает.
Даже если ты чайник.


St74   (2006-01-13 22:39:00) [13]

Скорее всего я вам немогу правельно донести проблемму!

Корче:

1. Есть RxLoginDialog, который я кинул на форму
2. при запуске Проги выходит диалог Registration где есть Поля User  и Password
3. После компиляции проги я Restorator'om выдернул Ресурс 3825.rc
4. перевёл стринги на русский
5.сохранил в Dll  >>> Rus.dll
а далее по сабжу!

Или я чайник, что вероятнее или я сам незнаю то ли я делаю, так ли надо!


Reindeer Moss Eater   (2006-01-13 22:28:00) [14]

Ресурс есть!

Откуда известно?


Reindeer Moss Eater   (2006-01-13 22:26:00) [15]

А почему нет смены String'a не знаю!

Потому что в коде нигде нет "смены стринга"


St74   (2006-01-13 22:22:00) [16]


> Reindeer Moss Eater ©   (13.01.06 22:13) [11]


Ресурс есть!

А почему нет смены String'a не знаю! Продолжаю проверять строки!


isasa   (2006-01-13 22:21:00) [17]

Да, а
@S -> Addr(S)


isasa   (2006-01-13 22:19:00) [18]

а написать просто "S".

:)
S[1] - !?


begin...end   (2006-01-13 22:13:00) [19]

> isasa ©   (13.01.06 22:09) [9]

> Какое SetLength статическому массиву?

Это понятно, не скомпилируется. Уже разобрались.

> @S это переменная ? (значение адреса)

S -- это переменная. @S -- это значение адреса. Хотя в [0] можно было и не употреблять знак "@", а написать просто "S".


Reindeer Moss Eater   (2006-01-13 22:13:00) [20]

Да правильный у него код.
За исключением ненужной установки длины.

У него либо в в загруженной библиотеке нет ресурса, либо он строку не может достать из array[0..255] of char


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо