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
Что не так?


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

Про LoadString - это я автору вопроса.


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

var
...
S: array [0..255] of Char;
begin
...
  SetLength(S, 512); // Место ошибки!!! <<<-- Какое SetLength статическому массиву?
  LoadString(h, 1, @S, 255); <<<-- @S это переменная ? (значение адреса)  


isasa   (2006-01-13 22:05:00) [23]

Да, еще

const MaxMsgLen = $00FF; // или $FFFF

надо объявлять самому.


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

> isasa ©   (13.01.06 21:20) [3]

Разве этот код существенно отличается от [0]?


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

Безусловно.
Сократил, что-бы не связываться с GetLastError.
В случае ошибки функция вернет пустую строку.


Reindeer Moss Eater   (2006-01-13 21:33:00) [26]

LoadString - функция. Она возвращает результат.


begin...end   (2006-01-13 21:28:00) [27]

> St74   (13.01.06 20:48) [2]

Очень жаль.


isasa   (2006-01-13 21:20:00) [28]

Где-то, в начале

.........
 dllHnd:=LoadLibrary(PChar(infStr));
 SuccInitDLL:=(dllHnd<>0);
 if SuccInitDLL then begin
   MainForm.resHnd:=dllHnd;
   MainForm.InitControl(dllHnd);
   Application.OnHelp:=MainForm.AppHelp;
  end
 else begin
   MessageDlg('Нет файла  '+infStr,  mtError , [mbOK], 0);
   Halt(1);
 end;
...........

function TMainForm.StrRes(i: integer): string;
var buf : PChar;
begin
 buf:=strAlloc(MaxMsgLen);
 LoadString(resHnd, i, buf, MaxMsgLen);
 Result:=StrPas(buf);
 strDispose(buf);
end;


St74   (2006-01-13 20:48:00) [29]


> begin...end ©   (13.01.06 20:42) [1]


Да я уже её убирал, ошибки нет но строки из Dll в проге не меняются!


begin...end   (2006-01-13 20:42:00) [30]

> St74   (13.01.06 20:40)

> SetLength(S, 512);

Эта строка не нужна.


Страницы:   1 2

Наверх

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