首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi动态库回到pchar截断

2013-07-08 
delphi动态库返回pchar截断我用.net调用delphi写的动态链接库返回值是pchar.net调用代码 [DllImport(QBSq

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
     

热点排行