主程序调用一个DLL,DLL生成一系列SQL语句,类型是TStringList,大概是8M左右。现在DLL可以很好的生成,我希望用PChar类型传回
DLL中:
Result :=slSQL.gettext;
slSQL.clear;
主程序中
pBuffer :=abcdefg(*,*,*,*);//生成SQL的函数,引用DLL中的。
slSQL.Text :=pBuffer;
StrDispose(pBuffer);结果SQL太长导致内存管理器疯了。调试结果是同样的测试环境,出错的问题不同,有时提示主程序访问错误,有时提示dll访问错误。我现在快疯了,改成返回一个临时文件名的方式。没错误。请问如果我不希望在硬盘上生成临时文件,该怎么办?

解决方案 »

  1.   

    这个我也想过,但是用内存映射还不如直接临时文件呢。用PCHAR程序有什么不妥吗?
      

  2.   

    理论上,pchar最大可达2G,用它应该没问题,8M不能算大数据.重新申请内存将SQL拷入试试(直接指向.gettext会不会是临时指针?)
      

  3.   

    不希望在硬盘上生成临时文件?
    是不想有硬盘读写损耗,还是不想他人取得此sql?
    如果是后者,dll可以生成加密的文件,使用函数先解密再使用
      

  4.   

    和一个很大的SQL文件没关系 是其它地方错了 仔细找找吧
      

  5.   

    或者StrDispose早了或者不需要StrDispose?
      

  6.   

    找到了,根本不是这个的问题。
    是我一个callback函数写错了。dll声明是PChar,而主程序写成string了。