0

我正在将代码从 Delphi 7 转换为 Epanet 的 XE3。我的问题与用 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 ,但没有任何运气。

4

1 回答 1

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));
于 2013-05-24T03:35:50.200 回答