我认为没有办法!你不能直接取到DLL中的变量。不过可以这样: 在DLL中定义一个函数就可以了。 function GetValue:Boolean; begin Result:=TSFIDAPI_IC_STAT.HasMainFile; end;
在Dll还要把GetValue export出来。
引出DLL中的对象有几个规则:你看一看是不是你注意到了 应用程序只能访问对象中的虚拟方法。 对象实例只能在DLL中创建。 应用程序和DLL必须都具有对象及其方法的定义,其方法的顺序必须一致。 DLL中的对象不能继承。----摘自《DELPHI5开发人员指南》这是原代码://公用的接口单元,也是需要从DLL中引出的对象 type TConvertType = (ctUpper, ctLower); TStringConvert = class(TObject) {$IFDEF STRINGCONVERTLIB} private FPrepend: String; FAppend : String; {$ENDIF} public function ConvertString(AConvertType: TConvertType; AString: String): String; virtual; stdcall; {$IFNDEF STRINGCONVERTLIB} abstract; {$ENDIF} {$IFDEF STRINGCONVERTLIB} constructor Create(APrepend, AAppend: String); destructor Destroy; override; {$ENDIF} end;{ For any application using this class, STRINGCONVERTLIB is not defined and therefore, the class definition will be equivalent to: TStringConvert = class(TObject) public function ConvertString(AConvertType: TConvertType; AString: String): String; virtual; stdcall; abstract; end; }
//项目文件StringConvertLib.dll library StringConvertLib;uses ShareMem, SysUtils, Classes, StringConvertImp in 'StringConvertImp.pas';exports InitStrConvert; end. //这是实现TStringConvert对象的代码,在DLL中 unit StringConvertImp; {$DEFINE STRINGCONVERTLIB}interface uses SysUtils; {$I StrConvert.inc}function InitStrConvert(APrepend, AAppend: String): TStringConvert; stdcall;implementationconstructor TStringConvert.Create(APrepend, AAppend: String); begin inherited Create; FPrepend := APrepend; FAppend := AAppend; end;destructor TStringConvert.Destroy; begin inherited Destroy; end;function TStringConvert.ConvertString(AConvertType: TConvertType; AString: String): String; begin case AConvertType of ctUpper: Result := Format('%s%s%s', [FPrepend, UpperCase(AString), FAppend]); ctLower: Result := Format('%s%s%s', [FPrepend, LowerCase(AString), FAppend]); end; end;function InitStrConvert(APrepend, AAppend: String): TStringConvert; begin Result := TStringConvert.Create(APrepend, AAppend); end;end.
TSFIDAPI_IC_STAT:stdcall;External 'tsfidapi.dll';
在DLL中定义一个函数就可以了。
function GetValue:Boolean;
begin
Result:=TSFIDAPI_IC_STAT.HasMainFile;
end;
应用程序只能访问对象中的虚拟方法。
对象实例只能在DLL中创建。
应用程序和DLL必须都具有对象及其方法的定义,其方法的顺序必须一致。
DLL中的对象不能继承。----摘自《DELPHI5开发人员指南》这是原代码://公用的接口单元,也是需要从DLL中引出的对象
type TConvertType = (ctUpper, ctLower); TStringConvert = class(TObject)
{$IFDEF STRINGCONVERTLIB}
private
FPrepend: String;
FAppend : String;
{$ENDIF}
public
function ConvertString(AConvertType: TConvertType; AString: String): String;
virtual; stdcall; {$IFNDEF STRINGCONVERTLIB} abstract; {$ENDIF}
{$IFDEF STRINGCONVERTLIB}
constructor Create(APrepend, AAppend: String);
destructor Destroy; override;
{$ENDIF}
end;{ For any application using this class, STRINGCONVERTLIB is not defined and
therefore, the class definition will be equivalent to: TStringConvert = class(TObject)
public
function ConvertString(AConvertType: TConvertType; AString: String): String;
virtual; stdcall; abstract;
end;
}
library StringConvertLib;uses
ShareMem,
SysUtils,
Classes,
StringConvertImp in 'StringConvertImp.pas';exports
InitStrConvert;
end.
//这是实现TStringConvert对象的代码,在DLL中
unit StringConvertImp;
{$DEFINE STRINGCONVERTLIB}interface
uses SysUtils;
{$I StrConvert.inc}function InitStrConvert(APrepend, AAppend: String): TStringConvert; stdcall;implementationconstructor TStringConvert.Create(APrepend, AAppend: String);
begin
inherited Create;
FPrepend := APrepend;
FAppend := AAppend;
end;destructor TStringConvert.Destroy;
begin
inherited Destroy;
end;function TStringConvert.ConvertString(AConvertType: TConvertType; AString: String): String;
begin
case AConvertType of
ctUpper: Result := Format('%s%s%s', [FPrepend, UpperCase(AString), FAppend]);
ctLower: Result := Format('%s%s%s', [FPrepend, LowerCase(AString), FAppend]);
end;
end;function InitStrConvert(APrepend, AAppend: String): TStringConvert;
begin
Result := TStringConvert.Create(APrepend, AAppend);
end;end.
unit MainFrm;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;{$I strconvert.inc}type
TMainForm = class(TForm)
btnUpper: TButton;
edtConvertStr: TEdit;
btnLower: TButton;
procedure btnUpperClick(Sender: TObject);
procedure btnLowerClick(Sender: TObject);
private
public
end;var
MainForm: TMainForm;function InitStrConvert(APrepend, AAppend: String): TStringConvert; stdcall;
external 'STRINGCONVERTLIB.DLL';implementation{$R *.DFM}procedure TMainForm.btnUpperClick(Sender: TObject);
var
ConvStr: String;
FStrConvert: TStringConvert;
begin
FStrConvert := InitStrConvert('Upper ', ' end');
try
ConvStr := edtConvertStr.Text;
if ConvStr <> EmptyStr then
edtConvertStr.Text := FStrConvert.ConvertString(ctUpper, ConvStr);
finally
FStrConvert.Free;
end;
end;procedure TMainForm.btnLowerClick(Sender: TObject);
var
ConvStr: String;
FStrConvert: TStringConvert;
begin
FStrConvert := InitStrConvert('Lower ', ' end');
try
ConvStr := edtConvertStr.Text;
if ConvStr <> EmptyStr then
edtConvertStr.Text := FStrConvert.ConvertString(ctLower, ConvStr);
finally
FStrConvert.Free;
end;
end;end.