Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

Что такое 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.01 c
14-25503
Atilla
2003-12-16 17:29
2004.01.09
Алгоритмы


4-25669
reef
2003-11-07 16:32
2004.01.09
WriteFile и 1Mb массив


3-25252
Avsam
2003-12-09 19:13
2004.01.09
Выбор SQL базы


1-25440
del_programmer
2003-12-23 17:42
2004.01.09
skin


14-25558
lipskiy
2003-12-15 02:04
2004.01.09
Эмулятор принтера?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский