各位高手,我现在遇到如下问题:
  我用VC写了一个DLL用来处理算法,再用Delphi来调用它。这个DLL的入口函数为int GenCaculate(int **X,xlength int,ylength int);也就是说,作为delphi的主程序必须要向DLL传一个xlength,ylength的二维数组,其中xlength,ylength可变。这个问题怎么解决啊,各位兄台,先谢谢了!
  如果说在VC里调用这个函数,只要new出一个X数组,然后把这个二维指针名作为参数就可以了,可Delphi我没看到关于二维指针的用法??
  

解决方案 »

  1.   

    用1维数组或一块buffer代替, 自己计算一下下标并不复杂啊, y*行宽+x而已
      

  2.   

    楼上的是好方法,我可以试试,谢谢!刚才又遇到了一个奇怪的问题,我用C写的DLL,其中有两个接口函数,如下:
    extern "C" __declspec(dllexport) void input(int x) 
    { theApp.Data=x;

     
    extern "C" __declspec(dllexport) int output(int x) 

    return theApp.Data;

    编译通过后,在Delphi中调用这两个函数,如下:
    input(StrToInt(edit1.Text));  
    edit4.Text:=inttostr(output(strtoint(edit2.Text)));这样运行起来一切正常,但如果把第二个函数改为
    edit4.Text:=inttostr(output(i));其中i为integer时,就出现了如下错误:
    F:/动态链接库实例\TestVcDllForm\Project1.exe faulted with message:‘access violation at 0x00000000:read of address 0x00000000'.Process Stopped.Use Step or Run to continue.
    这是怎么回事啊?哪个高人指点一下啊
     
      

  3.   

    1.  在工程文件中引用 ShareMem 单元文件
    2.  声明API时,将指针类型声明为 WideString 类型而不要声明为PCHAR
      

  4.   

    定义:Output(const i: integer);
      

  5.   

    delphi中函数声明写出来 看看, 我怀疑是调用约定有问题, 要用cdecl而不是stdcall
      

  6.   

    楼上的这位兄弟太厉害了,我万分感激,说到点子上了!!
    可还是有问题啊,按照你的方法运行正常,可当我关闭程序时又出问题了,错误如下:
    PProject Project1.exe raised exception class EInvalidPointer with message'Invalid pointer operation' Process stopped.Use Step or Run to continue.
    哪位兄弟知道,请赐教啊!!!
    这好象是指针问题,可我没有定义指针啊