delphi动态库返回pchar截断
我用.net调用delphi写的动态链接库返回值是pchar
.net调用代码
[DllImport("QBSqlData.dll", CharSet = CharSet.Ansi, PreserveSig = false)]
public static extern string SelectSqlData(ref StringBuilder sbStr);
//public static extern StringBuilder SelectSqlData();
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sbStr = new StringBuilder(102400);
string s = SelectSqlData(ref sbStr);
Div1.InnerText = sbStr.ToString();
}
delphi动态库函数
function SelectSqlData(var sbStr:PChar):string;stdcall;
HotelConNet.ReadDataset('SELECT top 50 * FROM feeitem ',cdsData);
GetMem(SS,102400);
GetMem(sbStr,102400);
SS:=PChar(cdsData.XMLData+char(#0));
sbStr:=SS;
str:='1';
Result:=str;
返回值sbStr是一个大容量xml数据集。如果只返回一两条记录则是成功的,返回10条以上就被截断了。
delphi动态库 .net调用delphi Pchar stringbuilder
[解决办法]
function SelectSqlData(var sbStr:PChar):string;stdcall;
这不需要这样义
而是:
function SelectSqlData(sbStr:PChar):string;stdcall;
这个sbStr是外面分配好的传进来的
在函数内部不能重新分配
GetMem(sbStr,102400);这个是多余的,并且也不对
下面这句 sbStr:=SS;也是不对的
而是应该COPY,怎么能直接把指针地址赋值呢
CopyMemory(sbStr,SS,102400);这样才把数据真的给了sbStr