Главная страница
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.026 c
14-25527
Knight
2003-12-19 09:16
2004.01.09
Атомные часы


1-25373
Indy
2003-12-25 04:45
2004.01.09
Документация по Indy


3-25226
Петров Денис
2003-12-11 13:58
2004.01.09
Cannot prepare a CREATE DATABASE/SCHEMA statement


14-25597
_mandrake_
2003-12-17 14:12
2004.01.09
Может кто знает, возможно ли с компа (через инет) позвонить на


3-25187
Вольный Стрелок
2003-12-12 11:16
2004.01.09
работа TQuery.OnUpdateRecord