我正在将代码从Delphi 7转换为XE3 for Epanet。我的问题是用C编译的dll中的* char。
dll中的代码如下:
int DLLEXPORT ENopen(char *f1, char *f2, char *f3)
/* Check that file names are not identical */
....
if (strcomp(f1,f2) || strcomp(f1,f3) || strcomp(f2,f3))
{
writecon(FMT04);
return(301);
}
....
在delphi 7中可以正常工作:
function ENopen(F1: PChar, F2 : PChar, F3 : PChar) : Integer; stdcall;
在XE3 301中返回。我试图将PChar改为PAnsiChar而没有任何运气。
答案 0 :(得分:3)
基本上你的问题是EPANET2.DLL不是Unicode。
首先,将EPANET2.PAS中的所有PChar更改为PAnsiChar,如下所示
function ENopen(F1: PAnsiChar, F2 : PAnsiChar, F3 : PAnsiChar) : Integer; stdcall;
然后更改对EPANET2入口点的调用中的参数以使用PAnsiChar。以下任一方法都可以使用,因为没有一个入口点返回字符串。
- 使用字符串 -
var
rc : integer;
F1, F2, F2 : string;
…
rc := ENopen(PAnsiChar(AnsiString(F1)), PAnsiChar(AnsiString(F2)),
AnsiChar(AnsiString(F3)));
- 使用AnsiStrings -
var
rc : integer;
F1, F2, F2 : AnsiString;
…
rc := ENopen(PAnsiChar(F1), PAnsiChar(F2), PAnsiChar(F3));