帮助上是这么说的: 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.好像是只有.net程序中,这才是不安全的,在一般delphi中象 MessageBox(Handle,pchar('aaa'),'',0); 这样的函数,不用强制类型转换,难道还用一个额外的pchar变量吗?我认为没有那个必要。
这种warning没事,关系不大。 程序可以跑下去的,不影响整体性能的。 呵呵
补充一点,一般d下调用API,很多都是PChar型别阿。
procedure TForm1.FormCreate(Sender: TObject); begin Caption := PChar('abcd'); <----并没有出现警告 end;我用的是D6。PChar是指向字符的指针。 使用前需要分配空间。有些API需要使用PChar类型,当然也可以用字符类型的数组来代替。 比如: procedure TForm1.FormCreate(Sender: TObject); var Dir: PChar; DirArr: array[0..255] of Char; begin GetMem(Dir, 256); GetSystemDirectory(Dir, 256); <----PChar类型 Caption := Dir; FreeMem(Dir); GetSystemDirectory(DirArr, 256); <----字符类型数组 Caption := DirArr; end;
程序真的不可避免这些Unsafe的东西吗?如果真的有这些unsafe的东西存在,是不是说明我们的软件会有问题呢?
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.好像是只有.net程序中,这才是不安全的,在一般delphi中象
MessageBox(Handle,pchar('aaa'),'',0);
这样的函数,不用强制类型转换,难道还用一个额外的pchar变量吗?我认为没有那个必要。
程序可以跑下去的,不影响整体性能的。
呵呵
begin
Caption := PChar('abcd'); <----并没有出现警告
end;我用的是D6。PChar是指向字符的指针。
使用前需要分配空间。有些API需要使用PChar类型,当然也可以用字符类型的数组来代替。
比如:
procedure TForm1.FormCreate(Sender: TObject);
var
Dir: PChar;
DirArr: array[0..255] of Char;
begin
GetMem(Dir, 256);
GetSystemDirectory(Dir, 256); <----PChar类型
Caption := Dir;
FreeMem(Dir); GetSystemDirectory(DirArr, 256); <----字符类型数组
Caption := DirArr;
end;
所以我还是认为,做桌面application的话,不需要考虑这个警告的。