Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.026 c