问一下,我的程序在使用PChar('aaa')时老是提示警告说 Unsafe type 'PChar',我看着很烦,有没有办法消除警告?或者说,怎么样使用PChar才是安全的?
我不想在编译环境中改。

解决方案 »

  1.   

    project->Options->Compiler Messages->Unsafe type,把勾去掉。
      

  2.   

    我就是不想这样啊,我想知道怎么样使用PChar才是安全的。
      

  3.   

    好像Nicrosoft大哥都解决不了,我也解决不了,不是没有尝试。
      

  4.   

    难道Unsafe code也是这么解决吗?
    程序真的不可避免这些Unsafe的东西吗?如果真的有这些unsafe的东西存在,是不是说明我们的软件会有问题呢?
      

  5.   

    帮助上是这么说的:
    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变量吗?我认为没有那个必要。
      

  6.   

    这种warning没事,关系不大。
    程序可以跑下去的,不影响整体性能的。
    呵呵
      

  7.   

    补充一点,一般d下调用API,很多都是PChar型别阿。
      

  8.   

    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;
      

  9.   

    刚才看了一下,这个编译警告在d6中好像没有,d7中增加了许多编译警告的选择功能,并且一般d7的程序默认工程中“unsafe type”警告是关闭的,除非是将d6工程拿到d7下编译,它由于读不到设置,才会打开该警告。
    所以我还是认为,做桌面application的话,不需要考虑这个警告的。