为什么编译器在编译MadRes时抱怨Char和AnsiChar不兼容?

时间:2013-06-24 17:29:53

标签: delphi delphi-2010

我正在编译MadRes,但错误是:

Checking project dependencies...
Compiling Project1.dproj (Debug configuration)
[DCC Warning] madRes.pas(351): W1057 Implicit string cast from 'AnsiString' to 'string'
[DCC Warning] madRes.pas(351): W1057 Implicit string cast from 'AnsiString' to 'string'
[DCC Error] madRes.pas(519): E2010 Incompatible types: 'Char' and 'AnsiChar'
[DCC Fatal Error] Unit1.pas(7): F2063 Could not compile used unit 'madRes.pas'
Failed
Elapsed time: 00:00:00.6

然后告诉我这部分单位madRes:

   if GetVersion and $ 80000000 = 0 then
        result: = CreateFileW (fileName, c1, c2, nil, c3, 0, 0)
   else result: = CreateFileA (pchar (string (WideString (fileName))), c1, c2, nil, c3, 0, 0);
end;

代码是一个程序,我发现exe运行顺利,但问题是当我想从我的计算机编译时。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您应该下载并安装当前版本的madCollection:http://madshi.net/

早已为unicode支持进行了更新 - 有问题的行现在看起来像这样:

result := CreateFileA(PAnsiChar(AnsiString(UnicodeString(fileName))), 
                                                       c1, c2, nil, c3, 0, 0);

Delphi的默认字符串(PChar等)在D2009中从Ansi更改为2字节unicode;这引入了一个需要明确的Ansi特定实现(PAnsiChar,AnsiString)的兼容性。如果您有兴趣阅读更多内容,我认为EDN上的这篇文章可能是一个好的开始:

Delphi in a Unicode World