我使用Delphi编写了一个DLL,其中有一个函数需要使用Array of pChar,也就是字符串数组,可是我不知道在VC里面怎么声明才能够调用。我写了一个很简单的例子,请指点一下。
在Delphi的DLL中有这样的一个函数:
function MyFunc(pchArr: Array of pChar): integer; stdcall;
如何在VC中声明呢?
int stdcall MyFunc(???????);

解决方案 »

  1.   

    pchar本来就是一个字符数组指针了,你怎么还用array of pchar呢?如果一定要这样用的话.在VC中可以这样声明:
    int myfunc(pchar * pchararr);
      

  2.   

    注意的是在Delphi中不要用String,用WideString,不要用variant,用OleVariant类型,主要是这两个
      

  3.   

    在 VC 中用Array of pChar你得了解 VCL 动态数组的内部机理,据此写代码
    一麻烦,二不可靠,三不利于维护接口部分最好用“低级”一些的数据结构,内存分配必须自己来做,没办法让系统自动完成【由 VC 分配内存】
    //Delphi
    type
    PDynArray = ^TDynArray;
        TDynArray = array[0..1] of PChar;function MyFunc(pchArr: PDynArray): integer; stdcall;//VC
    typedef char * PChar;
    typedef PChar * TDynArray;
    typedef TDynArray PDynArray; //C++ 中数组和数组指针是一回事
    int __stdcall MyFunc(PDynArray pchArr);
    ...
    PDynArray pchArr = new PChar[N];
    int result = MyFunc(pchArr);
    ...
    delete[] pchArr;【由 Delphi 分配内存】
    //Delphi
    type
    PDynArray = ^TDynArray;
        TDynArray = array[0..1] of PChar;function MyFunc(var pchArr: PDynArray): integer; stdcall;
    var size: integer;
    begin
    ...
    size := ...;
    ...
    GetMem(pchArr, size);
    ...
    end;
    procedure FreeArray(pchArr: PDynArray); stdcall; //必须定义一个专门的释放过程
    begin
    FreeMem(pchArr);
    end;//VC
    typedef char * PChar;
    typedef PChar * TDynArray;
    typedef TDynArray PDynArray; //C++ 中数组和数组指针是一回事
    int __stdcall MyFunc(PDynArray & pchArr);
    void __stdcall FreeArray(PDynArray pchArr);
    ...
    PDynArray pchArr;
    int result = MyFunc(pchArr);
    ...
    FreeArray(pchArr);