zoukankan      html  css  js  c++  java
  • Delphi 调用DLL TStream作为参数

    调用DLL里的函数,不同版本的RTL间不可以将TStream作为参数,也就是说Delphi调用不同版本的Delphi 编写的DLL不可以将TStream作为参数。但是用IStream接口可以。

    用IStream接口,必须用到两个类,TStreamAdapter和TOleStream。

    调用TStreamAdapter.Create将TStream对象转换成IStream接口,然后传给DLL,DLL里再调用TOleStream.Create(const Stream: IStream),将IStream转换成TStream对象。

    如果需要返回TStream对象,则再将TStream对象转成IStream,Exe接收后再将IStream转换成TStream即可。

    笔者将图片传给DLL解压后,保存成文件发现错误。最终发现需要再将TOleStream转换成TMemoryStream对象。这样就可以保存了。

    转换成TMemoryStream只需建立一个TMemoryStream对象,再调用CopyFrom函数。

    使用TStreamAdapter和TOleStream需引用ActiveX,vcl.AxCtrls单元。

    目前我的做法是用Delphi 10.4.2创建DLL,d7调用DLL里的函数对数据进行压缩,必竟现在d7方面的东西太少了。不得不用高版本的

    参考代码如下

    function ZSTD_CompressionStream(Data:TStream):TStream;
    var
      IData,IData2:IStream;
     begin
      Data.Position:=0;
      IData:=TStreamAdapter.Create(Data);
      IData2:=ZSTDCompressionStream(IData);//调用DLL里的函数,参数类型是iStream,返回也是IStream
      Result:=TOleStream.Create(IData2);
      Result.Position:=0;
     end;
    

      

  • 相关阅读:
    Appsacn 定期自动化扫描
    安全扫描工具 AppScan
    安全扫描工具 Netsparker
    Appium环境搭建
    selenium元素定位大全
    浅谈 WebDriver如何应对不同浏览器
    自动化环境搭建
    三次握手四次挥手
    通俗讲解python__new__()方法
    第十三章、元类之控制类的调用过程
  • 原文地址:https://www.cnblogs.com/wuxi15/p/14815777.html
Copyright © 2011-2022 走看看