用MFC封装的一个数学算法DLL,为了验证算法的正确性,DLL提供了一个接口,该接口不需要任何输入变量,譬如DLLTest()。
用MFC程序调用,计算出的结果是正确的,但用Delphi调用,计算出来的结果不正确。
该算法涉及大矩阵求逆及奇异值分解。
不解的是,该dll所有数据输入及计算都是自身实现,为何dephi调用结果不正确?

解决方案 »

  1.   

    那得看dll中如何处理的了,关键在于数据类型
      

  2.   

    MFC和Delphi对该Dll的调用代码贴出了看看。
      

  3.   

    stdcall
      

  4.   

    Delphi的调用过程:
    uses
       function DllTest():Boolean;stdcall;external 'Invert.dll';procedure TForm1.btn3Click(Sender: TObject);
    begin
       DllTest();
    end;Win32 Console Application的调用过程:extern "C" bool _stdcall DllTest(void);
    #pragma comment(lib, "Invert.lib")int _tmain(int argc, _TCHAR* argv[])
    {
        DllTest();
        return 0;
    }
      

  5.   

    DLL自身从一个txt读入数据进行计算,并把结果写到另一个txt中,整个过程都是独立于外部调用的,不理解。
      

  6.   

    我曾经碰到这样的一个情况,也是DLL调用的问题,用VC++调用结果正常,用Delphi调用就不正常,情况也类似于楼主。后来我问了提供Dll给我们的公司,他们说该Dll用VC++编译而成的,用Delphi调用也许会存在不兼容的情况。 后来查了许多的资料,也没有相关的说明。但是我们同时曾经自己用VC++编写DLL,用Delphi调用时行时不行,最后不了了之,全改成VC++开发。估计你也是这种情况,也许VC++在生成DLL的时候是否还要注意什么兼容性的设置呢?
      

  7.   

    调用时的数据类型、长度对照,查一下Delphi和C的映射,尤其牵涉到Delphi的Word之类长度不定的值时,会出错,俄以前遇到过:)
      

  8.   

    今天又用C++Builder测试了一下,计算结果没有问题,就是delphi调用结果不正确,郁闷!
      

  9.   

    C++Builder结果一致,因为都是C++语言Delphi用的是Pascal语言,凭什么结果要一致
      

  10.   

    几乎100%是各自数据类型的差异导致的,贴你DllTest()的MFC实现代码来看看
      

  11.   

    估计是CPU的浮点标志的问题