Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Что такое Unsafe type Pointer   Найти похожие ветки 

 
Viktor   (2003-12-23 22:15) [0]

Здравствуйте Мастера! При компиляции DLL в ХР выскакивает это предупреждение. Из справки я понял, что это потенциально опасно.Что сделать что бы его не было. Вот код.
Форма в библиотеке:

unit ulogin;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons,ComCtrls, ExtCtrls,Dialogs, Variants, DB, DBTables,
jpeg,uLoginData;
type
TPasswordDlg = class(TForm)
Label1: TLabel;
OKBtn: TButton;
CancelBtn: TButton;
Label2: TLabel;
Bevel1: TBevel;
Password: TEdit;
Label3: TLabel;
Login: TEdit;
procedure OKBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
LoginData:TLoginData;
{ Public declarations }
end;

procedure ShowLoginDialog(Handle:THandle;P:Pointer);
var
PasswordDlg: TPasswordDlg;

implementation

{$R *.dfm}

procedure ShowLoginDialog(Handle:THandle;P:Pointer);
begin
Application.Handle:=Handle;
PasswordDlg:=TPasswordDlg.Create(Application);
PasswordDlg.LoginData:=TLoginData(P);
with PasswordDlg do
begin
ShowModal;
Free;
end;
end;

А зто вызов из приложения

procedure TfMain.N11Click(Sender: TObject);
type
TShowLoginDialog=procedure(Handle:THandle;P:Pointer);
var
ShowLoginDialog:TShowLoginDialog;
k:integer;
begin
hLib:=LoadLibrary("c:\windows\system\login.dll");
if hLib<32 then
begin
ShowMessage("Error load DLL");
exit;
end;
ShowLoginDialog:=TShowLoginDialog(GetProcAddress(hLib,"ShowLoginDialog"));
LoginData:=TLoginData.Create;
ShowLoginDialog(Self.Handle,LoginData);
FreeLibrary(hLib);
end;


 
Юрий Зотов ©   (2003-12-23 23:33) [1]

Насколько я понял, если Вы не собираетесь использовать этот код под .NET, то на такое сообщение можно не обращать внимания. А отключается оно в опциях проекта (вкладка Compiler Messages, в списке снять галку у третьего снизу пункта).

Хотя ничто не мешает изменить тип параметра на TLoginData и обойтись без всяких Pointer"ов.

Последнее - объект TLoginData создается в EXE. А вот где и как он уничтожается? По идее, надо бы тоже в EXE, либо использовать ShareMem.


 
Viktor   (2003-12-23 23:47) [2]

Юрий Зотов! Спасибо все понял


 
3APA3A ©   (2003-12-24 00:48) [3]

to Юрий Зотов - а при чем здесь .NET? То есть, почему под .NET так нельзя делать?


 
Юрий Зотов ©   (2003-12-24 00:54) [4]

> 3APA3A © (24.12.03 00:48) [3]

Я просто посмотрел справку (compiler errors):

You have used a data type or operation for which static code analysis cannot prove that it does not overwrite memory. In a secured execution environment such as .NET, such code is assumed to be unsafe and a potential security risk.


 
3APA3A ©   (2003-12-24 01:11) [5]

Ясно... мораль - чаще жмите F1 - интересные же вещи пишут.. =)))



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
14-25549
Driverrr
2003-12-19 16:10
2004.01.09
Текст на болванке


6-25464
MyNickName
2003-11-09 09:30
2004.01.09
Перекодировка темы и текста сообщения.


1-25403
Sirakuz
2003-12-24 18:13
2004.01.09
Поведение OwnerDrawVariable ListBox при докировании


7-25626
Данила
2003-10-27 13:18
2004.01.09
C, D, E ... сколько их.


8-25444
Элл
2003-09-10 09:17
2004.01.09
доступ к exif и iptc информации в jpg-файле