Delphi Dll 动态调用例子(1)

http://blog.sina.com.cn/s/blog_62c46c3701010q7h.html

一、编写dll

library TestDllByD2007;

uses
  SysUtils,
  Classes;
  function test(const astr:PChar):Boolean;stdcall;
  begin
    Result:=True;
  end;
{$R *.res}
  exports test;
begin
end.

注意:1.不能使用string类型,否则涉及到资源释放的问题,使用Pchar代替string。

2.Dll中不能直接返回string,除非引用ShareMem单元,发布程序时需要包含BORLNDMM.DLL

二、编写测试窗体,就一个button.在button的代码中,实现dll的动态加载和释放。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFTest=function (const astr:PChar):Boolean;
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  sdll:string;
  tfTTT:TFTest;
  handle:THandle;
  sstr:string;//声明该变量,目的是避免发生异常。
begin
  sdll:=‘TestDllByD2007.dll‘;
  Caption:=‘‘;
  handle:=LoadLibrary(PAnsiChar(sdll));
  if Handle <> 0 then
  begin
    @tfTTT := GetProcAddress(Handle, ‘test‘);
    if @tfTTT <> nil then
    begin
      sstr:=‘testsss‘;
      if tfTTT(PChar(sstr))=True then
      begin
        Caption:=‘true‘;
      end
      else
      begin
        Caption:=‘false‘;
      end;
    end
    else
    begin
      Caption:=‘can not find the test function‘;
    end;
    FreeLibrary(Handle);
  end
  else
  begin
    Caption:=‘can not load library ‘+ sdll;
  end;
end;

end.

时间: 2024-08-05 11:08:55

Delphi Dll 动态调用例子(1)的相关文章

Delphi Dll 动态调用例子(3)-仔细看一下

http://blog.163.com/bxf_0011/blog/static/35420330200952075114318/ Delphi 动态链接库的动态和静态调用 为了让人能快速的理解 静态调用.动态调用,现在做一个函数封装在一个DLL中,然后在APPLICATION form里面调用这个函数,这个函数处理两个数的和.用代码和图片说话:代码如下 library Project1; { Important note about DLL memory management: ShareMe

Delphi Dll 动态调用例子(2)

http://zhidao.baidu.com/question/157196792.html delphi动态调用DLL 写了个1.dll内容如下 library Project2; uses SysUtils, Classes; {$R *.res} function abc(x,y:Integer):Integer;stdcall; begin Result:=x+y; end; exports abc; end. 如何动态调用它呢. 比如想实现Edit3.Text:=IntToStr(a

Delphi函数动态调用实现免杀

Delphi 源码免杀之函数动态调用实现免杀的下载者自己编译这份代码看看过N多杀软没什么技术含量只是发出来给不懂的人入入门也防止有新人老是来问 ShellApi,URLMon 单元 //Delphi动态调用API函数 procedure TForm1.Button1Click(Sender: TObject); var SourceFile:ansistring; DestFile :ansistring; down2:function(Caller: IUnknown; URL: PChar;

C#与MATLAB混合编程--DLL动态调用

一.MATLAB生成C#可调用的DLL MATLAB生成C#可调用的DLL可以使用MATLAB提供的deploytool工具.在命令行中敲入deploytool就可以打开这个工具.MATLAB编译器可能会需要提前配置. 打开工具对话框后填写项目名称.路径,并在type选项中选择.NET Assembly,这个选项能够生成用于C#的DLL. 完成后再左侧的.NET Assembly选项卡中点击编辑Class名称,然后在其下添加响应的m文件,如果m文件引用了其它的m文件,可以将所有关联的文件一起加入

Delphi中动态调用TXMLDocument的经历

var  vXMLDocument: TXMLDocument;begin  vXMLDocument := TXMLDocument.Create('c:/temp/temp.xml');  Caption := IntToStr(vXMLDocument.Node.ChildNodes.Count);  vXMLDocument.Free;end; 执行上面的代码跳出"Invalid pointer operation"异常 发现屏蔽vXMLDocument.Free;又正常了 跟

Delphi DLL 字符串传递例子

library EN; uses   SysUtils,   Classes,   UnitFormEN in 'UnitFormEN.pas' {FormEN}; {$R *.res} function GetJobType(p: PChar): Boolean; stdcall; var   str: string; begin   str := '我们是中国人,我们爱自己的祖国.';   StrCopy(p, PChar(str));   Result := Length(p) > Len

Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件

项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统上WinRAR或者好压软件一样的存在. 7-Zip软件下载与安装 网上下载相关安装包并完成安装,找到安装目录,复制7z.dll文件到D盘. .bat文件的制作 通过7-Zip软件使用手册了解到,通过动态命令行调用7z.dll可以把文件压缩成.tar.gz格式的,实际上是先将文件压缩成.tar格式的文

在Delphi中静态调用DLL 引用外部Dll External Dll 导入Dll

  调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton;

delphi编写与调用DLL(delphi7下测试通过)

http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html 1 delphi编写DLL 2 下面在delphi中编写一个简单的dll,在该dll中只有一个max函数,返回2个数中的大数(Delphi 5.0) 3 1.New->DLL;取名为DLL_0001,编写代码: 4 library dll_0001; 5 uses 6 SysUtils, 7 Classes; 8 {$R *.RES} 9 function max(x,y:integer):