COM+场景下OleVariant类型参数转换为TStringList的正确实现方法
问题原因
你直接调用TStringList.Add()方法会把传入的整个字符串当做单行插入,而客户端传递的StringList.Text本身是将所有行用换行符拼接后的单个长字符串,因此会出现所有内容都存到索引0位置的问题。
正确实现方案
客户端的传参逻辑无需修改,传递StringList.Text是OleVariant参数承载字符串列表内容的常规实现,服务端只需调整赋值方式即可。
服务端示例代码
function MetodServer(InputParams: OleVariant; var OutputParams: OleVariant): OleVariant; var MyList: TStringList; begin MyList := TStringList.Create; try // 直接给Text属性赋值,TStringList会自动按换行符拆分内容为多行 MyList.Text := InputParams; // 此处可正常按索引访问列表的每一行,例如: // ShowMessage(MyList[0]); // 取第一行内容 // ShowMessage(MyList[1]); // 取第二行内容 // 你的业务逻辑写在这里 finally MyList.Free; // 必须手动释放创建的TStringList对象,避免内存泄漏 end; end;
注意事项
- 如果客户端和服务端均为Delphi开发,默认
TStringList.Text使用CRLF(#13#10)作为换行分隔符,无需额外处理即可兼容 - 若存在跨语言传输场景,可自定义分隔符传输,避免换行符兼容性问题:
- 客户端传参改为传递
StringList.DelimitedText - 服务端接收时先指定分隔符再赋值:
MyList.Delimiter := ','; // 自定义分隔符,可根据需求修改 MyList.StrictDelimiter := True; // 禁止自动按空格拆分内容 MyList.DelimitedText := InputParams; - 客户端传参改为传递
内容的提问来源于stack exchange,提问作者jmontegrosso
相关产品推荐
相关产品推荐

