zoukankan      html  css  js  c++  java
  • Dll 使用 PChar 参数的小例子

    当用delphi开发的dll中有参数或返回值是字符串时,需要调用sharemem单元,且需要borlnmm.dll一起发布程序。用Pchar代替string是一个解决方案,只不过对pchar的使用要复杂一些:

    Dll 文件:
    --------------------------------------------------------------------------------
     
    library Lib;
    
    uses
      SysUtils, Classes;
    
    {$R *.res}
    
    procedure Test(p: PChar);
    const
      Title = 'Title ';
    var
      str: string;
    begin
      str := p;
      StrCopy(p, Title);
      StrCat(p, PChar(str));
    end;
    
    exports Test;
    
    begin
    end.
    --------------------------------------------------------------------------------
    调用的代码文件:
    --------------------------------------------------------------------------------
     
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      end;
    
    var
     Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure Test(p: PChar); external 'Lib.dll';
    
    var num: Integer;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      p: PChar;
    begin
      Inc(num);
      p := StrAlloc(255);
      StrCopy(p, PChar(IntToStr(num)));
      Test(p);
      Text := p;
      StrDispose(p);
    end;
    
    end.
    --------------------------------------------------------------------------------
    调用的窗体文件:
    --------------------------------------------------------------------------------
     
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 103
      ClientWidth = 173
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 48
        Top = 40
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 0
        OnClick = Button1Click
      end
    end
    
  • 相关阅读:
    Docker(二)Image 与网络
    Docker(一)概念与基础
    Apache Hudi 介绍与应用
    Flink读写Kafka
    Flink 应用的一致性保障
    Flink系统配置
    Flink架构(五)- 检查点,保存点,与状态恢复
    Flink架构(四)- 状态管理
    HBase 中读 HDFS 调优
    Nginx模块之http.md
  • 原文地址:https://www.cnblogs.com/delphi7456/p/1857850.html
Copyright © 2011-2022 走看看