epanet2.dll中的调用函数

时间:2013-05-23 11:51:25

标签: delphi delphi-xe3

我正在将代码从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而没有任何运气。

1 个答案:

答案 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));