Главная страница
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.04 c
1-16456
Галинка
2004-01-28 06:43
2004.02.06
О типах данных в Delphi


3-16120
VID
2004-01-11 18:13
2004.02.06
Знатокам FIBPlus 4.8: Что-то проиходит не так, после...


1-16355
Ivolg
2004-01-24 14:37
2004.02.06
Как у ВинАмпа


3-16061
voimix
2004-01-12 12:37
2004.02.06
Размер заголовка у поля OLE в Access2000


1-16347
KIR
2004-01-27 11:15
2004.02.06
Ошибка в winnt.dll и больше никаких сообщений...