我使用Delphi编写了一个DLL,其中有一个函数需要使用Array of pChar,也就是字符串数组,可是我不知道在VC里面怎么声明才能够调用。我写了一个很简单的例子,请指点一下。
在Delphi的DLL中有这样的一个函数:
function MyFunc(pchArr: Array of pChar): integer; stdcall;
如何在VC中声明呢?
int stdcall MyFunc(???????);
在Delphi的DLL中有这样的一个函数:
function MyFunc(pchArr: Array of pChar): integer; stdcall;
如何在VC中声明呢?
int stdcall MyFunc(???????);
int myfunc(pchar * pchararr);
一麻烦,二不可靠,三不利于维护接口部分最好用“低级”一些的数据结构,内存分配必须自己来做,没办法让系统自动完成【由 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);