Zła dyrektywa external

0

Czy moze mi ktos powiedziec dlaczego mi zaznacza ponizszy kodzik i pisze ze jest zła dyrektywa external ??

function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word;
external mpr name 'WNetEnumCachedPasswords';

Za pomoc z gory dzięki

0

w stalej "mpr" ma byc nazwa dllki z ktorej exportujesz, byc moze nie zdeklarowales jej.. zrob przed tym tak:

const
mpr = 'JAKASDLL.DLL';

albo mozesz zrobic od razu tak:

function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external 'JAKASDLL.DLL' name 'WNetEnumCachedPasswords';

0

Ale własnie problem jest w tym ze jak mam całość w osobnym unicie tak jak poniżej to mi wszytsko działa:

unit Unit1;

interface

uses
Windows, SysUtils, Classes, Forms, ShellAPI, Controls, StdCtrls;

type
TForm1 = class(TForm)
ListBox: TListBox;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
hMPR: THandle;
end;

var
Form1: TForm1;
Count: Integer = 0;

function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; stdcall;

implementation

{$R *.DFM}
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords';

type
PWinPassword = ^TWinPassword;
TWinPassword = record
EntrySize: Word;
ResourceSize: Word;
PasswordSize: Word;
EntryIndex: Byte;
EntryType: Byte;
PasswordC: Char;
end;

var
WinPassword: TWinPassword;

function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall;
var
Password: String;
PC: Array[0..$FF] of Char;
begin
inc(Count);

Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize);
PC[WinPassword.ResourceSize] := #0;
CharToOem(PC, PC);
Password := StrPas(PC);

Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize);
Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize);
PC[WinPassword.PasswordSize] := #0;
CharToOem(PC, PC);
Password := Password + ': ' + StrPas(PC);

Form1.ListBox.Items.Add(Password);
Result := True;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) 0 then
begin
ListBox.Items.Add('Nie odczytano haseł: użytkownik nie zalogowany');
end
else
if Count = 0 then
ListBox.Items.Add('Nie znaleziono zapamiętanych haseł...');
end;

end.

A jak zacząłem tego używać w innym programie to już nie ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1