将代码从C ++转换为Delphi

时间:2009-09-30 23:52:30

标签: c++ delphi

我在C ++中有下一个代码:

for (long i=0; i < num_iter ; i++)
{
    bp->bpgt(data[i%8], &data[i%8][3]);

    if( bp->mse(&data[i%8][3]) < thresh) 
        break;
}

其中bpgt是一个过程,mse是一个函数,thresh是一个Double类型,data是一个Double类型的二维矩阵。

void bpgt(double *in,double *tgt);
double mse(double *tgt);
double data[][4]={
        0,0,0,0,
        0,0,1,1,
    1,1,1,1 };

我试图将它传递给Delphi代码:

for i := 0 to FNum_Iter - 1 do begin
    FBPN.bpgt(FData[i mod 8], ^FData[i mod 8,3]);

    if FBPN.mse(@FData[i mod 8, 3]) < FThresh then
      Break;
end;

但我失败了,因为我是C ++的新手,我不知道翻译“&amp;”运营商。愿有人帮助我吗?

提前致谢。

5 个答案:

答案 0 :(得分:2)

我会翻译

void bpgt(double *in,double *tgt);

as

procedure bpgt(var in:double; var tgt: double)

嗯,就像那样,我的德尔福有点生疏......

这样,在bpgt中,你可以改变tgt(和in)的值。

你的bpgt电话将是

FBPN.bpgt(FData[i mod 8], FData[i mod 8,3]);
事实上,Delphi的var(通过引用调用)经常可以用作C / C ++指针传递的精确功能等价物。

答案 1 :(得分:2)

这是基于你对Fvu答案的回复。如果它们是阵列,那可能会使事情变得复杂,因为C没有真正的数组,只是指针上撒上一层粉末状的合成糖。解决方案取决于您是将其完全转换为Delphi,还是尝试编写可与C代码一起使用的Delphi例程。

如果您正在使用纯Delphi,请声明一个数组类型,如此

type
   TDoubleArray = array[0..length] of double; //or "array of double" for a dynamic array

然后将函数的参数声明为var Data: TDoubleArray。如果这是动态数组,请将 for 循环从0 to high(Data);

开始

如果需要使用C:

因为C没有真正的数组,所以你需要做一些额外的工作。声明你的类型:

type
   TCDoubleArray = array[0..65535] of double;
   PCDoubleArray = ^TCDoubleArray;

任何足够大的值都适用于数组的上限。无论如何,我们不打算全部使用它。它必须比你用过的更大。使参数类型为PCDoubleArray,对应double *。您需要传递一个额外的参数,该参数告诉您数组的终点在哪里。让你的for循环从0到结束点,并通过说FData^[i mod 8]之类的东西来访问它。

答案 2 :(得分:0)

&amp;允许您将变量的地址发送到函数中,而不是它的值。此引用调用允许函数更改变量的值。我不知道等效的Delphi机制,但你想在那里传递变量的引用,或者将过程改为函数,返回值并将其存储在原始变量中。

答案 3 :(得分:0)

你很亲密,试试这个:

for i := 0 to FNum_Iter - 1 do begin
    FBPN.bpgt(FData[i mod 8], FData[i mod 8,3]);

    if FBPN.mse(FData[i mod 8, 3]) < FThresh then
      Break;
end;

很抱歉,我在这里没有delphi来编译并亲自试用。

答案 4 :(得分:0)

Rudy's Delphi Corner,他有一个excellent article about the pitfalls of converting C/C++ to Delphi。在我看来,这是尝试此任务时的基本信息。这是描述:

  

本文适用于所有人   需要将C / C ++标头转换为   德尔福。我想分享一些   你可以遇到的陷阱   从C或C ++转换。本文   不是教程,只是讨论   经常遇到的问题   案例。它适合初学者   以及更有经验的人   C和C ++的翻译。

他还写了一个“Conversion Helper Package”,安装到Delphi IDE中,有助于将C / C ++代码转换为Delphi:

alt text
(来源:rvelthuis.de

他关于这个主题的其他相关文章包括: