我想在vc中创建一个dll,这个dll的输出函数满足,有输入参数、输出参数,
并且,输入、输出参数中都有数组,请问,我这个函数应该怎么样建立,
具体形式是什么?怎样在delphi调用
_declspec(dllexport) int testdll(double x,double a[100],double b[100],int &m);
其中,double x,double a[100]输入参数
double b[100],int &m 输出参数
这样可以吗?
并且,还有一个问题,在这里我定义的函数返回为int,值为1,怎么在delphi调用完以后,返回的是0?
急等,请赐教

解决方案 »

  1.   

    你的问题可以这样声明一个过函数:
    function testdll(x: double;a, b: array[1..100] of double;m: ^integer); external 'XXX.dll'name'testdll'
      

  2.   

    你的问题可以这样声明一个过函数:
    function testdll(x: double;a, b: array[1..100] of double;m: ^integer): integer; external 'XXX.dll'name'testdll'
      

  3.   

    试试这样行不行?行的话,捐点可用分给我;不行的话,,,就算了
    type
      TDoubleArray=[0..100-1] of Double;
      PDoubleArray = ^TDoubleArray;function testdll(x: double; a, b: PDoubleArray; var m: Integer): Integer; stdcall;
    external 'DLLNAME.DLL';
      

  4.   

    关于输入参数中存在数组的问题,
    在VC中,我定义了输出函数形式为
    int MyDllFn(int i,double a[100],double b[100],double aa[2])
    在delphi中调用
    var
     a:array[0..99] of double;
      b:array[0..99] of double;
      aa:array[0..99] of double;
    function MyDllFn(var i:integer;var a;var b;var aa):integer;stdcall;External 'mydll.dll';当运行的时候,出现读内存错误
    access violation at 0x0000000:read of address 0x0000000请问如何解决
      

  5.   

    上述问题我已经解决,就是delphi和vc对数组的定义维数必须一样现在,我还有一个问题想问
    就是,数组的维数刚开始并不能确定,
    而是动态的生成,vc中定义数组必须指定维数
    有什么办法解决?
      

  6.   

    用动态数组
    bytearray: array of byte;
    然后记住在使用前setLength就行了
    setlength(bytearray,x);
      

  7.   

    以下是我的dll文件中需要输出的函数
    int MyDllFn(int i,double a[100],double b[100],double aa[2])
    {
    initM(MATCOM_VERSION);
    Mm x,y,a1;
       
         double *a_v=(double*) malloc(i*sizeof(double));
    double *b_v=(double*) malloc(i*sizeof(double));
           
        
    for(int k=0;k<i;k++)
    {
    a_v[k]=a[k];
    b_v[k]=b[k];
    }
        
       
    x=rand(1,i);
    y=rand(1,i);
     
    memcpy(x.addr(),a_v,i*sizeof(double)); 
    memcpy(y.addr(),b_v,i*sizeof(double)); 

    a1=polyfit(x,y,1);
       
    aa[0]=*a1.addr();
    aa[1]=*a1.addr(2);
        
    exitM();
    return 1;
    }其中的i是动态数组的维数,可是这样做总是出现出现读内存错误
    access violation at 0x0000000:read of address 0x0000000请问有什么好的解决方法没有?
      

  8.   

    delphi和vc是不是不能传送动态数组?