Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Invalid typecast {handle:=LoadLibrary(PChar(PluginList   Найти похожие ветки 

 
Алексей   (2004-01-22 13:29) [0]

procedure FindPlugin;// Поиск плагинов

type
TGetNProc=function:shortstring;

var
sr:TSearchRec;
i:byte;
pgetn:TGetNProc;

begin
i:=0;
SetLength(PluginList,255);
if FindFirst("smpp_*.dll",faAnyFile,sr) = 0 then begin
repeat
PluginList[i]:= sr.Name;
inc(i);
until FindNext(sr) <> 0;
FindClose(sr);
SetLength(PluginList,i);
for i:=0 to length(PluginList) - 1 do begin
handle:=LoadLibrary(PChar(PluginList[i]));
if handle <> 0 then begin
@pgetn:=GetProcAddress(handle, "GetPluginName");
PluginList[i]:=pgetn;
AppendMenu(GetSystemMenu(handle, FALSE), MF_SEPARATOR, 0, "");
AppendMenu(GetSystemMenu(handle, FALSE), MF_STRING,SC_MyMenuItem, P Char(PluginList[i]));
end
end
end
else begin
ShowMessage("Не найдено подключаемых модулей");
PluginList:=NIL;
end;
end;// FindPlugin
{----------------------------------}
Короткие пояснения: ( PluginList – динамический массив ShortString)
Задача – найти плагины для проги (они содержат формы), изменить главное меню оной проги (добавить названия плагинов в меню открыть) и обеспечить запуск найденных плагинов.
Ошибка возникает в этих строках:
handle:=LoadLibrary(PChar(PluginList[i])) и
AppendMenu(GetSystemMenu(handle, FALSE), MF_STRING,SC_MyMenuItem, PChar(PluginList[i])); (Invalid typecast).
ПыС: сильно ногами не бейте – первая более - менее серьёзная программа (в целях обучения).


 
Игорь Шевченко ©   (2004-01-22 13:33) [1]

http://www.delphikingdom.com/mastering/plugins.htm


 
YuRock ©   (2004-01-22 13:34) [2]

Потому-что не понятно, что такое PluginList


 
icWasya ©   (2004-01-22 13:49) [3]

PChar и ShortString несовместимы, поскольку скорее всего в ShortString нет завершающего #0. Если руками добавить завершающий #0, то вместо PChar ( PluginList [i] ) можно использовать @ ( PluginList [i] [1] )


 
Алексей   (2004-01-22 14:26) [4]

Спасибо. На самом деле понял через пять минут - решаеться простой заменой ShortString на String. Так что дело не в несовместимости (ведь String не имеет #0 в конце). Между прочим странно - пока я не начал пытаться работать с меню всё спокойно компилилось и с ShortString
2YaRock: читайте внимательнее - там написано, что PluginList массив ShortString


 
VMcL ©   (2004-01-22 15:26) [5]

>>Алексей (22.01.04 14:26) [4]

String, который AnsiString, очень даже имеет #0 в конце, а вот ShortString - нет.


 
Palladin ©   (2004-01-22 15:31) [6]


> Алексей (22.01.04 14:26) [4]

Это как это дело не в совместимости?
ShortString есть массив, а String есть указатель на массив (что и является по сути PChar).
Можно работать и с ShortString, только:
var
ss:shortstring;
...
ss:=ss+#0;
handle:=LoadLibrary(PChar(@ss));


 
Palladin ©   (2004-01-22 15:36) [7]

точнее LoadLibrary(PChar(@ss[1]));



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
1-16244
denis24
2004-01-26 17:14
2004.02.06
strringlist


3-16172
Александр Бакулин
2004-01-13 17:22
2004.02.06
Построение текстовых отчетов


3-16114
Penza19
2004-01-15 23:26
2004.02.06
Сортировка значений таблицы согласно выбранного столбца DBGrid


14-16618
Sirgey
2004-01-15 02:04
2004.02.06
Защита программки


14-16650
Кукушкинд
2004-01-13 14:08
2004.02.06
Друзья! Есть