你的引出这个声明,类似于C语言中的头文件!!!你可以写一个公用的单元,在Interface中定义你的类型和变量,然后在主程序和DLL中分别进行引用就可以了!!!

解决方案 »

  1.   

    不能这样吗?
    TSFIDAPI_IC_STAT:stdcall;External 'tsfidapi.dll';
      

  2.   

    我认为没有办法!你不能直接取到DLL中的变量。不过可以这样:
    在DLL中定义一个函数就可以了。
    function GetValue:Boolean;
    begin
      Result:=TSFIDAPI_IC_STAT.HasMainFile;
    end;
      

  3.   

    在Dll还要把GetValue export出来。
      

  4.   

    引出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;
    }
      

  5.   

    //项目文件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.
      

  6.   

    //这是对DLL文件进行调用的项目主窗口单元
    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.