C++定长参数填充与Delphi的PPChar

http://hi.baidu.com/rarnu/item/2e95210a69519a3af3eafc03

在用C++调用Delphi的DLL时,常有数组参数的问题发生。而C++要向Delphi传入数组似乎也不那么方便,于是特地写下此函数,只要规定了每个参数的长度,即可以将数组传入Delphi的DLL中。

在此,我将数组内每个元素的长度规定为256

函数代码如下:
void CharToParam(char* param, int paramCount, ...){
va_list arglist;
va_start(arglist, paramCount);
for(int i=0; i<paramCount; i++){
char* x1 = va_arg(arglist, char*);
for(int j=0; j<strlen(x1); j++){
param[i*256+j] = x1[j];
}
}
}

有了此函数后,就可以在C++的代码中拼装出要传给Delphi的参数了
char* params = new char[256 * 3];
char* p1 = params;
char* sec = "Cfg";
char* pa1 = "pa1";
char* df1 = "1";
CharToParam(p1, 3, sec, pa1, df1);
char* ret1 = callScript("ReadCfg", &params, 3);

上面的代码中,callScript即是从Delphi输出的函数,然后看一下Delphi端如何处理接收到的参数:
function ScriptCallFunction(const Name: PChar; Params: PPChar; ParamsCount: Integer): PChar; stdcall;
var
v: array of Variant;
vCall: Variant;
p:PChar;
i: Integer;
begin
SetLength(v, ParamsCount);
if ParamsCount > 0 then
begin
P := Params^;
i:=0;
v[i] := string(P);
for I := 1 to ParamsCount - 1 do
begin
Inc(P, 256);
v[i] := string(P);
end;
end;
vCall := VarArrayOf(v);
end;

通过这种方式,Delphi端就能够接到C++传来的PPChar,并获得其中的内容以便下一步操作的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值