После добавления модулей возникли проблемы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

После добавления модулей возникли проблемы

Сообщение manas_anarov » 22.12.2013 20:39:38

Выскакивает ошибка после добавления функции "GetFileNamefromLink" и новых модулей ",ShlObj, Windows,ComObj,ActiveX;".
В прошлом до добавления этих модулей программа работала нормально, функция "GetFileNamefromLink" не может работать без ",ShlObj, Windows,ComObj,ActiveX;".
вот эти ошибки
Код: Выделить всё
unit1.pas(59,43) Hint: Local variable "FileInfo" does not seem to be initialized
unit1.pas(82,14) Error: Incompatible type for arg no. 1: Got "TSearchRec", expected "LongWord"
unit1.pas(111) Fatal: There were 1 errors compiling module, stopping


Алгоритм этой программы таков
1. когда я нажимаю кнопку 1 программа сканирует папку или диск, находит запускателей вирусов т.е ярлыков.lnk и заносит их в лист бокс
2. при нажатии на кнопку 3 значение выбранного элемента Лист Бокса заносится в Edit2.Text
3. при нажатии на кнопку 4 должно быть выведено на экран путь вируса, функция GetFileNamefromLink возврашает путь местоположения вируса.
вот сама программа
Код: Выделить всё
interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls
  ,ShlObj, Windows,ComObj,ActiveX;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

function GetFileNamefromLink(LinkFileName: string): string;
var
  MyObject: IUnknown;
  MySLink: IShellLink;
MyPFile: IPersistFile;
  FileInfo: TWin32FINDDATA;
  WidePath: array[0..MAX_PATH] of WideChar;
  Buff: array[0..MAX_PATH] of Char;
begin
  Result := '';
  if (fileexists(Linkfilename) = false) then
    exit;
  MyObject := CreateComObject(CLSID_ShellLink);
  MyPFile := MyObject as IPersistFile;
  MySLink := MyObject as IShellLink;
  StringToWideChar(LinkFileName, WidePath, SizeOf(WidePath));
  MyPFile.Load(WidePath, STGM_READ);
  MySLink.GetPath(Buff, Max_PATH, FileInfo, SLGP_UNCPRIORITY);
  Result := buff;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  F: TSearchRec;
  Path: string;
  Attr: Integer;
begin
  {Искать все файлы в заданной директории с расширение .wav}
  Path := edit1.Text;//'c:\a\*.lnk'(*+'.mp3'*);
  {которые имеют атрибуты "Только для чтения" и "Архивный"}
  Attr := faAnyFile;
  FindFirst(Path, Attr, F);

  {Если хотя бы один файл найден, то продолжить поиск}
  if F.name <> '' then
  begin
    ListBox1.Items.Add('c:\'+F.name); {Добавление в TListBox имени найденного файла}
    while FindNext(F) = 0 do
      ListBox1.Items.Add('c:\'+F.name);
  end;
  FindClose(F);
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
  s:integer;
begin
  s:=ListBox1.Items.Count;
  ShowMessage(IntToStr(s));

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     Edit2.Text:=ListBox1.Items[Listbox1.itemindex];
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  res:string;
  GetFileName:string;
begin
   GetFileName:= edit2.Text;
   res:=GetFileNamefromLink(GetFileName);
   ShowMessage(res);
end;

end.
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: После добавления модулей возникли проблемы

Сообщение Vadim » 23.12.2013 07:20:09

Голубчик, а что у Вас расположено в 82-ой строке?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: После добавления модулей возникли проблемы

Сообщение manas_anarov » 23.12.2013 18:05:15

Vadim в процедуре Button2Click да ? эта кнопка предназначена для подсчета найденных потенциальных вирусо-запускателей. проблема не решена
Последний раз редактировалось manas_anarov 23.12.2013 18:42:31, всего редактировалось 1 раз.
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: После добавления модулей возникли проблемы

Сообщение Little_Roo » 23.12.2013 18:21:03

{$mode delphi} стоит?
А сам ActiveX установлен?
Код: Выделить всё
LazActiveX Package
------------------
The LazActiveX package contains the TActiveXContainer component and the IDE
integration of the necessary tools to create ActiveX components from a type
library or directly from the object (exe or dll).

REQUIREMENTS:
-------------
Windows XP or newer
FPC >= 2.6.1
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: После добавления модулей возникли проблемы

Сообщение manas_anarov » 23.12.2013 19:57:12

Little_Roo Вы это имеете ввиду {$mode objfpc}{$H+} ? когда я нажимаю Ctrl+ ActiveX открывается модуль Unit ActiveX; на палитре компонентов нету ActiveX .
мне посоветовали что проблемма в процедуре FindFirst , если не ошибаюсь похожие процедуры используются в модуле windows,fileutils и sysutils, сам запутался какой я модуль использую, я взял эти коды из форумов.
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: После добавления модулей возникли проблемы

Сообщение Little_Roo » 23.12.2013 21:08:42

manas_anarov писал(а):на палитре компонентов нету ActiveX .

Пакет - Открыть файл пакета - .... и так далее...
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: После добавления модулей возникли проблемы

Сообщение resident » 24.12.2013 00:43:42

resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

Рейтинг@Mail.ru
cron