Главная страница
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.033 c
8-16515
Il'ya
2003-09-28 13:47
2004.02.06
Работа с waveOut


3-16097
qwe
2004-01-16 09:57
2004.02.06
select FB 1.5 RC8


14-16611
Amigo Sv
2004-01-13 07:39
2004.02.06
Как хранить рисунок bmp в базе данных


1-16314
Chlavik
2004-01-25 04:35
2004.02.06
Вот так вот WinXp.... PS_USERSTYLE


1-16398
DimaK
2004-01-15 21:05
2004.02.06
Печать графического буфера