Форум: "Основная";
Текущий архив: 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.012 c